这是链表的第10篇算法,这是上一篇文章的加强版,力扣链接。
给定一个已排序的链表的头
head
, 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。示例 1:
输入:head = [1,2,3,3,4,4,5] 输出:[1,2,5]示例 2:
输入:head = [1,1,1,2,3] 输出:[2,3]
这个和上一题的不同是这道题要求只要重复就一个不剩,之前有所保留的话可以根据pre指针决定cur指针是否删除。但是这道题都删了的话就得换个做法了。
这道题其实没什么太大的区别,之前的思路是pre指针,现在是保留pre的值,换个思路解决问题:
func deleteDuplicates(head *ListNode) *ListNode {
if head == nil {
return head
}
result := &ListNode{Next: head}
cur := result
for cur.Next != nil && cur.Next.Next != nil {
if cur.Next.Val == cur.Next.Next.Val {
val := cur.Next.Val
cur.Next = cur.Next.Next.Next
for cur.Next != nil && cur.Next.Val == val {
cur.Next = cur.Next.Next
}
} else {
cur = cur.Next
}
}
return result.Next
}