leetcode82删除排序链表中的重复元素II

leetcode82 Remove Duplicates from Sorted List II

Posted by BY on September 27, 2019

前言

中间又断更新。

正文

问题来源

本问题来自leetcode上的82题。

问题描述

给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有重复出现的数字。

示例 1:

输入: 1->2->3->3->4->4->5
输出: 1->2->5

示例 2:

输入: 1->1->1->2->3
输出: 2->3

分析:

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func deleteDuplicates(head *ListNode) *ListNode {
    node := &ListNode{}
    node.Next = head
    q := node
    for q.Next != nil {
        k := q.Next.Val
        flag := false
        p := q.Next.Next
        for p != nil && p.Val == k {
            p = p.Next
            flag = true
        }
        if flag == true {
            q.Next = p
        } else {
            q = q.Next
        }
    }
    return node.Next
}

别人的解答

// 删除排序链表中的重复元素 II
func deleteDuplicates(head *ListNode) *ListNode {
    if head == nil || head.Next == nil {
        return head
    }
    if head.Val == head.Next.Val {
        for head.Next != nil && head.Val == head.Next.Val {
            head = head.Next
        }
        return deleteDuplicates(head.Next)
    }
    head.Next = deleteDuplicates(head.Next)
    return head
}

总结:

勤思考。

结语

不管怎么样好好加油。