存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中?没有重复出现?的数字。
返回同样按升序排列的结果链表。
第一遍理解错了,以为是把链表中重复出现的值删除只剩一个。提交代码后,发现理解错了。然后重新写了代码,卡在一个点,提交的代码一直不是自己想要的,甚至在纸上写都感觉代码没有问题。今天早上,简单看下,就发现问题在哪里。
这提醒我们,脑袋高糊的时候不要跟自己过不去,该休息休息。直接上代码
func deleteDuplicates(head *ListNode) *ListNode {
if head == nil{
return nil
}
p := head
newHead := &ListNode{300, nil}
newHead.Next = head
t := newHead
for p != nil && p.Next != nil{
if p.Val == p.Next.Val{
val := p.Val
m := p.Next.Next
for m != nil && m.Val == val{
m = m.Next
}
p = m
t.Next = p//如果没有这一行,在t中,p并未被跳过,导致链表没有变化
}else{
t.Next= p
t = t.Next
p = p.Next
}
}
return newHead.Next
}
|