首页 > 技术文章 > Leetcode -- 删除排序链表中的重复元素(83)

shawn-young 2020-06-03 22:14 原文

题目描述:

给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。e.g.  输入1-> 1 -> 2 -> 3 -> 3  输出:1->2->3

思路:

与删除数组中的重复元素不同,数组是有下标的,且删除数组中的元素可以用后面的元素覆盖前面的元素。

在链表中需要借助指针来实现。

第一种思路,构造一个新链表

class Solution:
    def deleteDuplicates(self, head: ListNode) -> ListNode:
        if head == None or head.next == None:
            return head
        d_head,d_head.next = ListNode(0),head  
        #将d_head看作是一个有头节点的链表,且链表的第一个元素指向head
        while (head != None and head.next != None):
           #对head进行操作   
            if(head.val==head.next.val):
                head.next = head.next.next
            else:
                head = head.next
        return d_head.next

第二种思路,使用cur指针指向头部head

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

  

推荐阅读