82. Remove Duplicates from Sorted List II
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
Example 1:
Input: 1->2->3->3->4->4->5 Output: 1->2->5
Example 2:
Input: 1->1->1->2->3 Output: 2->3
这里的策略和83. Remove Duplicates from Sorted List 不同。
因为这里需要考虑3个以上的连续的重复数字。
问题可以简化为:
1.找到重复数字
2.移除重复数字
比较麻烦的是,如果第一个数字就是重复的,那么需要重置head。
比如1->1->2->2这种情况,先移除1,head需要指向2;再移除2,head指向null。
处理方法是引入一个新的head,并且这个head只需要不和第一个数字重复就好。
public ListNode DeleteDuplicates(ListNode head) { if (head == null) { return null; } ListNode myHead = new ListNode(head.val + 1); myHead.next = head; ListNode node1 = myHead; ListNode node2 = node1.next; ListNode node1Prev = myHead; while (node2 != null) { if (node1.val == node2.val) { Remove(node1Prev, node1); node1 = node1Prev.next; node2 = node1?.next; } else { node1Prev = node1; node1 = node2; node2 = node1.next; } } return myHead.next; } private static void Remove(ListNode nodePrev, ListNode node) { int val = node.val; while (node != null && node.val == val) { node = node.next; } nodePrev.next = node; }
作者:Chuck Lu GitHub |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2018-03-09 fixed和absolute
2017-03-09 Func委托和Action委托
2016-03-09 override (C# Reference)
2016-03-09 virtual (C# Reference)