已解决
【面试必刷TOP101】 删除有序链表中重复的元素-I 删除有序链表中重复的元素-II
来自网友在路上 158858提问 提问时间:2023-09-23 04:41:11阅读次数: 58
最佳答案 问答题库588位专家为你答疑解惑
目录
题目:删除有序链表中重复的元素-I_牛客题霸_牛客网 (nowcoder.com)
题目的接口:
解题思路:
代码:
过啦!!!
题目:删除有序链表中重复的元素-II_牛客题霸_牛客网 (nowcoder.com)
题目的接口:
解题思路:
代码:
过啦!!!
写在最后:
题目:删除有序链表中重复的元素-I_牛客题霸_牛客网 (nowcoder.com)
题目的接口:
package main
import . "nc_tools"
/** type ListNode struct{* Val int* Next *ListNode* }*//*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param head ListNode类 * @return ListNode类
*/
func deleteDuplicates( head *ListNode ) *ListNode {// write code here
}
解题思路:
说实话,遇到这种题目我的第一个反应就是马上把链表里的数存进一个数据结构帮我去重,在 C++ 我用的 set 去重,现在用 Golang 了我就可以用 map 来去重,
代码肯定是可以通过的,但是题目要求的时间复杂度是 O(N),这样子实际上是不符合要求的,所以还是得想一个算法来解决这个问题,
好消息是,这是一个有序的链表,所以我们直接遍历,遇到相同的数字就直接删除
代码:
package mainimport . "nc_tools"/** type ListNode struct{* Val int* Next *ListNode* }*//*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param head ListNode类* @return ListNode类*/
func deleteDuplicates( head *ListNode ) *ListNode {cur := headpre := headfor cur != nil {tmp := cur.Valcur = cur.Nextfor cur != nil && tmp == cur.Val { // 如果相等就删除节点cur = cur.Nextpre.Next = cur}pre = cur}return head
}
过啦!!!
题目:删除有序链表中重复的元素-II_牛客题霸_牛客网 (nowcoder.com)
题目的接口:
package main
import . "nc_tools"
/** type ListNode struct{* Val int* Next *ListNode* }*//*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param head ListNode类 * @return ListNode类
*/
func deleteDuplicates( head *ListNode ) *ListNode {// write code here
}
解题思路:
这道题和上一题很像,但是难度更高,他的边界问题更多,核心的部分就是怎么把重复的数字那部分给删除掉,
如果没出现重复的数字,cur 和 prev 两个指针就继续往前遍历,如果遇到重复的数字就删掉这段数字,通过 continue 再把 cur 和 prev 之间的位置调整好,代码如下:
代码:
package mainimport . "nc_tools"/** type ListNode struct{* Val int* Next *ListNode* }*//*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param head ListNode类* @return ListNode类*/
func deleteDuplicates(head *ListNode) *ListNode {if head == nil {return nil}h := &ListNode{Next: head}prev, cur := h, head.Nextfor prev.Next != nil && prev.Next.Next != nil && cur != nil {cur = prev.Next.Nextif prev.Next.Val == cur.Val { // 删除重复数字的逻辑for cur != nil && prev.Next.Val == cur.Val {cur = cur.Next}prev.Next = curcontinue}prev = prev.Nextcur = cur.Next}return h.Next
}
过啦!!!
写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果感到有所收获的话可以给博主点一个赞哦。
如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~
查看全文
99%的人还看了
相似问题
- 【二叉树】常见题目解析(2)
- 力扣题目学习笔记(OC + Swift)
- 【PTA题目】L1-4 稳赢 分数 15
- 初刷leetcode题目(5)——数据结构与算法
- 竞赛 题目:基于机器视觉opencv的手势检测 手势识别 算法 - 深度学习 卷积神经网络 opencv python
- 初刷leetcode题目(1)——数据结构与算法
- 【华为OD机试AB高分必刷题目】拆分(Python-贪心算法实现)
- 通过一道题目带你深入了解WAF特性、PHP超级打印函数、ASCII码chr()对应表等原理[RoarCTF 2019]Easy Calc 1
- 数据结构:Map和Set(2):相关OJ题目
- C++模板元模板实战书籍讲解第一章题目讲解
猜你感兴趣
版权申明
本文"【面试必刷TOP101】 删除有序链表中重复的元素-I 删除有序链表中重复的元素-II":http://eshow365.cn/6-11895-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: sed的不同执行方式
- 下一篇: 鼠标拖拽拖动盒子时,与盒子内某些点击事件冲突问题解决