如果我在C中有一个链表,我需要编写一个函数来删除列表中的一个元素(不是第一个或最后一个)。该列表是一个全局变量,因此我使用它的任何地方都会被更改。如果我做一个while
循环来到正确的位置然后删除元素,那么整个列表都不会改变,因为我必须将头移到那一点?
在while循环中执行head = head -> next
时,指针逐个元素移动,一旦完成,我无法返回第一个元素。
那么如何在不删除部分列表的情况下删除元素呢?
答案 0 :(得分:1)
你不应该移动全局头部,而是在迭代列表时创建一个新指针作为临时头部。
让我们说清单如下:
A -> B -> C -> D
例如,如果要删除C,则需要迭代到B(并看到它指向C)。然后保存它指向C的指针,让我们调用它pC
,然后转到C并保存它指向D的指针,让它调用它pD
。
然后您可以通过执行pC = pD
简单地重新链接列表,以便B现在链接到D并完全跳过C.这样就可以从链接列表中删除元素。
您的新列表将为A -> B -> D
。
请记住在丢失指针之前转储变量。
答案 1 :(得分:1)
两个选项,在我的头顶:
让最后一个元素指向第一个元素。这样,无论您删除链接列表的哪个节点,都可以随时返回"。
始终保留对第一个元素的引用。
话虽这么说,我不认为将链表作为全球是一个好主意;没有别的办法吗?此外:链接列表是否适合您尝试实现的目标?