leetcode 每日一题 82. 删除排序链表中的重复元素 II

Posted nil_f

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 每日一题 82. 删除排序链表中的重复元素 II相关的知识,希望对你有一定的参考价值。

双指针

思路:

创建一个空的头结点dummy,头节点的下一节点是head。用cur指向当前要处理去重的节点,pre指向上一个完成去重的节点。初始状态pre = dummy,cur = pre.next。开始对cur进行处理,如果cur.next.val == cur.val,while遍历更新cur指向的节点找到最后一个和cur.val相同的节点。然后让pre下一个指向的节点变成最后一个和cur.val相同节点下一个指向的节点,这样达到对cur.val相同的节点的去重操作,也即pre.next = cur.next,cur = cur.next(这里要注意的是,pre本身指向的并没有改变),继续进行遍历去重操作。如果cur.next.val != cur.val,则更新pre和cur的值,即pre = pre.next,cur = cur.next。去重结束后,返回dummy指向的下一节点即可。

例如: 1->2->3->3->4->4->5

 

 

代码:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def deleteDuplicates(self, head: ListNode) -> ListNode:
        dummy = ListNode(-1)
        dummy.next = head
        pre = dummy
        cur = pre.next
        while cur and cur.next:
            if cur.val == cur.next.val:
                while cur.next and cur.val ==cur.next.val:
                    cur = cur.next
                pre.next = cur.next
                cur = cur.next
            else:
                pre = pre.next
                cur = cur.next
        return dummy.next

 

以上是关于leetcode 每日一题 82. 删除排序链表中的重复元素 II的主要内容,如果未能解决你的问题,请参考以下文章

《LeetCode之每日一题》:288.删除排序链表中的重复元素

《LeetCode之每日一题》:288.删除排序链表中的重复元素

《LeetCode之每日一题》:98.删除排序链表中的重复元素

《LeetCode之每日一题》:99.删除排序链表中的重复元素 II

leetcode 每日一题 83. 删除排序链表中的重复元素

《LeetCode之每日一题》:133.删除链表中的节点