申明:本文只用做自己的学习记录
题目
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。
返回同样按升序排列的结果链表。
示例 1:
输入:head = [1,2,3,3,4,4,5]
输出:[1,2,5]
示例 2:
输入:head = [1,1,1,2,3]
输出:[2,3]
代码
func deleteDuplicates(head *ListNode) *ListNode {
//判断边界条件
if head == nil {
return nil
}
//新建表头
dummynode := &ListNode{0, head}
temp := dummynode
//当前节点和下一节点不为空
for temp.Next != nil && temp.Next.Next != nil {
//如果当前节点的值等于下一节点的值
if temp.Next.Val == temp.Next.Next.Val {
//取出该点的值
x := temp.Next.Val
//当前节点不等于空,且当前节点值==x,则将当前节点删除
for temp.Next != nil && temp.Next.Val == x {
temp.Next = temp.Next.Next
}
//如果两个节点值不相等,则遍历下一个
} else {
temp = temp.Next
}
}
//返回当头节点的下一节点
return dummynode.Next
}