从链接列表中的给定位置删除节点

时间:2016-04-14 11:09:21

标签: c data-structures linked-list

我想从列表中的给定位置删除节点, 但我的删除功能不起作用。 请帮帮我。

提前致谢。

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;
}

4 个答案:

答案 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)