题目描述
给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
解题思路
我开始有两种解决思路
1就是递归法
寻找不同的next,然后将next作为参数递归调用函数实现删除重复项,
值得注意的是,你需要判断不要越界访问,就是next=nil时不要调next内的任何参数否则会报错.
2.是双指针法
使用两个指针假定p,q,p作为先位,对比位;.q作为后位,被对比位,pq对比q不断后移,直到与p的val不同或为空时p.next=q,p=p.next,如果q为空就停止输出,如果不为空就继续后移.
代码示例
func deleteDuplicates(head *ListNode) *ListNode {
if head==nil||head.Next==nil {
return head
}
for ; head.Next != nil; {
if head.Val==head.Next.Val {
head.Next = head.Next.Next
}else {
break
}
}
if head.Next!=nil {
head.Next=deleteDuplicates(head.Next)
}
return head
}
这里只展示了递归法,双指针回头写
执行结果
更多
更多解法请参考:
https://leetcode.cn/problems/remove-duplicates-from-sorted-list/solution/