C链表 - 删除元素

时间:2017-10-13 12:27:18

标签: c list element

如果我在C中有一个链表,我需要编写一个函数来删除列表中的一个元素(不是第一个或最后一个)。该列表是一个全局变量,因此我使用它的任何地方都会被更改。如果我做一个while循环来到正确的位置然后删除元素,那么整个列表都不会改变,因为我必须将头移到那一点?

在while循环中执行head = head -> next时,指针逐个元素移动,一旦完成,我无法返回第一个元素。 那么如何在不删除部分列表的情况下删除元素呢?

2 个答案:

答案 0 :(得分:1)

你不应该移动全局头部,而是在迭代列表时创建一个新指针作为临时头部。

让我们说清单如下:

A -> B -> C -> D

例如,如果要删除C,则需要迭代到B(并看到它指向C)。然后保存它指向C的指针,让我们调用它pC,然后转到C并保存它指向D的指针,让它调用它pD

然后您可以通过执行pC = pD简单地重新链接列表,以便B现在链接到D并完全跳过C.这样就可以从链接列表中删除元素。

您的新列表将为A -> B -> D

请记住在丢失指针之前转储变量。

答案 1 :(得分:1)

两个选项,在我的头顶:

  • 让最后一个元素指向第一个元素。这样,无论您删除链接列表的哪个节点,都可以随时返回"。

  • 始终保留对第一个元素的引用。

话虽这么说,我不认为将链表作为全球是一个好主意;没有别的办法吗?此外:链接列表是否适合您尝试实现的目标?