链表——删除排序链表的重复结点(一个都不保留)
来源:互联网 发布:java编程怎样弄下划线 编辑:程序博客网 时间:2024/05/22 02:46
题目:删除排序链表中的所有重复结点,只留下没有重复过的那些结点。
For example,
Given1->2->3->3->4->4->5, return1->2->5.
Given1->1->1->2->3, return2->3.
思路:
设置三个指针 ppre,pcur,pnext,pcur始终指向链表中一个数字第一次出现时候的位置;每次循环开始时,pnext设为pcur的下一个结点,判断pnext.val是否等于pcur.val。
1.若不相等,当前pcur指向的数字没有重复过,ppre不再为空。
2.若相等,则为重复结点,循环 pcur == pcur.next 直到 pcur == null或者条件不再成立,为的就是让pcur指向下一个数字第一次出现的位置!
此时若ppre == null,表明头结点也在重复结点中,则头结点需要变更,head = pcur;否则 ppre.next = pcur;
代码如下:
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public ListNode deleteDuplicates(ListNode head) { if(head==null||head.next==null) return head; ListNode ppre=null; ListNode pcur=head;//pcur始终指向排序链表每个数字第一次出现时候的位置。 ListNode pnext=null; while(pcur!=null) { pnext=pcur.next; if(pnext!=null&&(pcur.val==pnext.val)) { int temp=pcur.val; while(pcur!=null&&pcur.val==temp) { pcur=pcur.next; } if(ppre==null) { head=pcur; } else { ppre.next=pcur; } } else//若pcur和pnext不是重复数字,更新ppre { ppre=pcur; pcur=pnext; } } return head; }}
0 0
- 链表——删除排序链表的重复结点(一个都不保留)
- 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
- 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
- 链表——删除链表中的重复结点
- 删除链表中重复的结点(链表)
- 删除链表中的重复的结点
- 删除链表的重复结点
- 排序的链表中删除重复的结点
- 删除排序链表中重复的结点(C++)
- 删除排序链表中重复的结点
- 剑指offer——链表-删除链表中重复的结点
- 剑指offer51--删除排序链表重复结点
- 不带头结点的单向链表排序——插入排序(C语言)
- sql 删除重复的项,保留一个。
- 第五十五篇:删除一个数组中多个连续或不连续重复的数字,保留一个
- 9.2链表(一)——移除未排序链表中的重复结点
- Remove Duplicates from Sorted List II 删除链表中的元素(不保留重复)
- 链表:删除链表中重复的结点(java实现)
- matlab/C 混合编程
- “重口味”海报引发热议,LG V6000 Plus冰箱如何诠释“精准营销”?
- CTF牛刀小试-摩斯电码
- 成长小记-老天为我又设了一道大坎
- 技术网站总结
- 链表——删除排序链表的重复结点(一个都不保留)
- MVC与三层架构区别
- github相关的网站
- 最全免费CDN公共库——网站提速
- UIDatePicker转为汉字,并且显示年月日
- android 无线调试
- jquery获取ul中li的值
- Processes
- iOS 截屏 swift