删除列表中的节点
Deleting node in list
*x = L->list[i]; /* Save the deleted element to parameter x */
for(j = i+1; j <= L->size-1; j++)
L->list[i] = L->list[i+1];
L->size--; /* The number of data elements is reduced by 1*/
return 1;
我无法完全删除节点,而不是这个,它只是替换值,但节点本身并没有被删除
在此for循环中
for(j = i+1; j <= L->size-1; j++)
L->list[i] = L->list[i+1];
此语句中使用的变量i
L->list[i] = L->list[i+1];
未更改。
你的意思好像是
for(j = i+1; j < L->size; j++)
L->list[j-1] = L->list[j];
如果数组 list
是动态分配的,那么您应该重新分配它,例如
for(j = i+1; j < L->size; j++)
L->list[j-1] = L->list[j];
L->size--;
T *tmp = realloc( L->list, L->size * sizeof( *tmp ) );
if ( tmp != NULL ) L->list = tmp;
您需要将 T
替换为数组元素的实际类型。我正在使用 T
因为从你的问题中不知道数组元素的类型是什么。
*x = L->list[i]; /* Save the deleted element to parameter x */
for(j = i+1; j <= L->size-1; j++)
L->list[i] = L->list[i+1];
L->size--; /* The number of data elements is reduced by 1*/
return 1;
我无法完全删除节点,而不是这个,它只是替换值,但节点本身并没有被删除
在此for循环中
for(j = i+1; j <= L->size-1; j++)
L->list[i] = L->list[i+1];
此语句中使用的变量i
L->list[i] = L->list[i+1];
未更改。
你的意思好像是
for(j = i+1; j < L->size; j++)
L->list[j-1] = L->list[j];
如果数组 list
是动态分配的,那么您应该重新分配它,例如
for(j = i+1; j < L->size; j++)
L->list[j-1] = L->list[j];
L->size--;
T *tmp = realloc( L->list, L->size * sizeof( *tmp ) );
if ( tmp != NULL ) L->list = tmp;
您需要将 T
替换为数组元素的实际类型。我正在使用 T
因为从你的问题中不知道数组元素的类型是什么。