83 删除排序链表中的重复元素-简单

题目:

给定一个已排序的链表的头 head删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表

解题思路

这道题有2种解法。一种是利用哑结点,遍历链表,只连接值不同的节点,详见解法1。

另一个解法是直接判断当前指针 cur 与当前指针的Next值是否一致,如果是,直接删掉后一个,详见解法2。

解法2更优雅一些。

// date 2022/10/08
// 解法1
/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func deleteDuplicates(head *ListNode) *ListNode {
    if head == nil || head.Next == nil {
        return head
    }
    dumy := &ListNode{}
    pre := dumy
    // add head
    pre.Next = head
    pre = head

    lastVal := head.Val

    cur := head.Next
    for cur != nil {
        if cur.Val != lastVal {  // find a new node
            pre.Next = cur
            pre = pre.Next
            lastVal = cur.Val // update last value
        }
        cur = cur.Next
    }
    pre.Next = nil
    return dumy.Next
}
// 解法2
func deleteDuplicates(head *ListNode) *ListNode {
    cur := head
    for cur != nil && cur.Next != nil {
        if cur.Val == cur.Next.Val {
            cur.Next = cur.Next.Next
            continue
        }
        cur = cur.Next
    }
    return head
}

最后更新于