我想从列表中的给定位置删除节点, 但我的删除功能不起作用。 请帮帮我。
提前致谢。
Node* Delete(Node *head, int position)
{
int count=0;
Node* temp, *temp1, *temp2;
temp = head ;
if(head==NULL){
return 0;
}
else if(position == 0)
{
head = head->next;
free(temp);
return head;
}
else{
while(count!= position-1)
{
temp = temp->next;
count++;
}
temp1 = temp->next;
temp->next = temp1->next;
free(temp1);
return temp;
}
return head;
}
答案 0 :(得分:3)
首先,正确格式化代码。
然后,移除return temp;
,以便列表的前一部分不会丢失。
您还可以删除第一个return head;
,因为该功能无论如何都会在最后一部分执行return head;
。
Node* Delete(Node *head, int position)
{
int count=0;
Node *temp, *temp1, *temp2;
temp = head;
if(head==NULL){
return NULL;
}
else if(position == 0)
{
head = head->next;
free(temp);
}
else{
while(count!= position-1)
{
temp = temp->next;
count++;
}
temp1 = temp->next;
temp->next = temp1->next;
free(temp1);
}
return head;
}
注意return 0;
是有效的,因为0
是空指针常量(N1256 6.3.2.3指针)并将其转换为指针已定义,但使用NULL
更好,因为它会清楚表明它正在处理指针。
答案 1 :(得分:1)
将return temp;
替换为return head;
如果节点小于位置,还要包括处理逻辑。
答案 2 :(得分:1)
我想补充一下MikeCAT的回答。当节点数小于位置时,您还应该处理条件。
其中一种方法可能是:
while(count!= position-1)
{
temp = temp->next;
if(temp == NULL)
return head;
count++;
}
答案 3 :(得分:0)
删除return temp
并撰写return head
。
此外,如果位置大于链表中的节点数,请检查条件。
在释放指针之前,我建议添加temp1->next=NULL
然后free(temp1)
。