从C中的链表中删除节点

时间:2014-11-19 17:41:00

标签: c linked-list nodes

我尝试了解从链接列表中删除节点,因此我创建了如下所示的函数Node *deleteNode(int item. Node *head)。它确实删除了一个节点,但没有删除我在main函数中指定的节点。如果我从链接的lsit(1,2,3,4,5,6)开始,它返回一个(1,3,4,5,6)的列表。所以它总是出于某种原因删除第二个节点。我的deleteNode函数中导致此错误的是什么错误?

2 个答案:

答案 0 :(得分:0)

您需要真正考虑列表的操作方式以删除节点。我肯定会考虑从你的deleteNode中删除几个部分,以便它更流畅。请考虑以下事项:

Node *deleteNode(int item, Node *head){
    Node * current = head, *pTemp = NULL, *pPrev = NULL;

while((current->link->info != item) && ((current -> link != NULL)) //You want to traverse the list until you find the item.
{      
  pPrev = current; // Assign previous pointer which is null to head of list and so on.
  current = current->link // Assign current pointer to next node.
}

if (current->link-> info == item )
{
  pTemp = current; // Assign temp pointer to current pointer
  current = pTemp->link; // set current to next pointer
  pPrev->link = current; // set previous pointer to current
  free (pTemp)
}
else
{
 // Did not find at all in list.
}

return head;

}

这是全面的,在运行中,请调试您的代码并在纸上写下您的列表结构。

答案 1 :(得分:0)

使用链接列表和指针和节点摸索,你知道哪个指针指向什么是非常重要的,并且链接列表的总体布局是什么。当我试图向某人解释时,我经常在白板上画一幅画。只需绘制一个包含一些节点的小图和连接它们的指针。通过这种方式,您可以非常快速地将哪些指针重定向到其他节点,以便从列表中删除节点。

简而言之:如果您知道该怎么做,那么绘图就非常清楚该做什么并且编码并不难。