Leetcode 83. 删除排序链表中的重复元素
算法
发布于: 2021-09-16

存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。

返回同样按升序排列的结果链表。

详细

示例 1:

83-1.jpg

输入:head = [1,1,2]
输出:[1,2]

示例 2:

83-2.jpg

输入:head = [1,1,2,3,3]
输出:[1,2,3]

提示:

  • 链表中节点数目在范围 [0, 300] 内
  • -100 <= Node.val <= 100
  • 题目数据保证链表已经按升序排列

题解

本题比较简单,下例使用循环算法,使用递归也是正确解法。

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func deleteDuplicates(head *ListNode) *ListNode {

    // 哑节点
    pre := &ListNode{
        Val: -1000,
        Next: head,
    }

    for pre.Next != nil {
        node := pre.Next
        if pre.Val == node.Val {
            pre.Next = node.Next
        } else {
            pre = node
        }
    }
    
    return head
}