📜  用链表中的重复项替换节点(1)

📅  最后修改于: 2023-12-03 15:11:19.794000             🧑  作者: Mango

用链表中的重复项替换节点

简介

在链表中,可能会出现一些节点的值相同的情况,这时候可以将这些重复的节点都删除,然后将其中一个节点保留,作为链表中这些重复节点的代表,可以用这个代表节点的值替换其他重复节点的值。

实现思路

我们可以用两个指针来遍历链表,一个指针 prev 指向当前节点的前一个节点,另一个指针 curr 指向当前节点。如果 curr 所指节点的值等于其后继节点的值,则逐个删除这些重复节点,直到 curr 所指节点的值不等于其后继节点的值为止。然后将 curr 所指节点作为代表节点保留,继续遍历链表。

具体而言,我们可以用一个 while 循环遍历整个链表,对于每一个节点,如果它的值等于其后继节点的值,就将它删除。删除操作可以通过修改 prev 指针的 next 值来实现。如果节点被删除了,那么 curr 指针不需要移动,prev 指针需要指向删除后的当前节点。如果节点没有被删除,那么 prevcurr 指针都需要向前移动一个节点。最终,我们将链表中保留的节点的值分别赋值给其他重复节点即可。

代码实现

下面是用 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
总结

用链表中的重复项替换节点这个问题的实现思路比较简单,但是需要注意一些细节,比如如何确定哪些节点需要删除、哪些节点需要保留。在实现时需要注意边界条件,避免出现空指针错误。