这是链表的第9篇算法,力扣链接。
给定一个已排序的链表的头
head
, 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。示例 1:
输入:head = [1,1,2] 输出:[1,2]示例 2:
输入:head = [1,1,2,3,3] 输出:[1,2,3]
先来试试快慢指针的方法,一个指向pre一个指向cur。
func deleteDuplicates(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
result, pre, cur := head, head, head.Next
for cur != nil {
if cur.Val == pre.Val {
pre.Next = cur.Next
cur = pre
} else {
pre = pre.Next
}
if cur == nil {
return result
}
cur = cur.Next
}
return result
}
当然也可以优化成一个指针,因为比较的只是pre而已,我们可以用cur和cur.Next来代替。
func deleteDuplicates(head *ListNode) *ListNode {
if head == nil {
return head
}
cur := head
for cur.Next != nil {
if cur.Val == cur.Next.Val {
cur.Next = cur.Next.Next
} else {
cur = cur.Next
}
}
return head
}
当然,还可以用空间换时间,这里就不搞了,简单题就不整这么麻烦了。