前言
中间又断更新。
正文
问题来源
本问题来自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
}
总结:
勤思考。
结语
不管怎么样好好加油。