📅  最后修改于: 2023-12-03 15:11:19.794000             🧑  作者: Mango
在链表中,可能会出现一些节点的值相同的情况,这时候可以将这些重复的节点都删除,然后将其中一个节点保留,作为链表中这些重复节点的代表,可以用这个代表节点的值替换其他重复节点的值。
我们可以用两个指针来遍历链表,一个指针 prev
指向当前节点的前一个节点,另一个指针 curr
指向当前节点。如果 curr
所指节点的值等于其后继节点的值,则逐个删除这些重复节点,直到 curr
所指节点的值不等于其后继节点的值为止。然后将 curr
所指节点作为代表节点保留,继续遍历链表。
具体而言,我们可以用一个 while 循环遍历整个链表,对于每一个节点,如果它的值等于其后继节点的值,就将它删除。删除操作可以通过修改 prev
指针的 next 值来实现。如果节点被删除了,那么 curr
指针不需要移动,prev
指针需要指向删除后的当前节点。如果节点没有被删除,那么 prev
和 curr
指针都需要向前移动一个节点。最终,我们将链表中保留的节点的值分别赋值给其他重复节点即可。
下面是用 Python 语言实现的代码:
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
def deleteDuplicates(head: ListNode) -> ListNode:
dummy = ListNode(0)
dummy.next = head
prev = dummy
curr = head
while curr:
if curr.next and curr.next.val == curr.val:
while curr.next and curr.next.val == curr.val:
curr = curr.next
prev.next = curr.next
else:
prev = prev.next
curr = curr.next
return dummy.next
用链表中的重复项替换节点这个问题的实现思路比较简单,但是需要注意一些细节,比如如何确定哪些节点需要删除、哪些节点需要保留。在实现时需要注意边界条件,避免出现空指针错误。