剑指_18.删除链表中的重复数字
来源:互联网 发布:淘宝长图 编辑:程序博客网 时间:2024/06/18 08:39
1.删除链表中的重复数字关键是如何解决头结点就是重复数字的情况。
public ListNode deleteDuplication(ListNode pHead) {if(pHead==null) return null; ListNode pre=new ListNode(0); ListNode dummy=pre; ListNode p=pHead; pre.next=p; while(p!=null&&p.next!=null&&pre.next!=null){ if(p.val==p.next.val){ if(p.next.next!=null){ //pre.next=p; p=p.next.next; pre.next=p; }else{ pre.next=null; } }else{ pre=pre.next; p=p.next; } } return dummy.next; }
上面这种情况能解决重复数字不在头节点的时候,但不能解决重复数字在头节点的情况。
public ListNode deleteDuplication(ListNode pHead) {if(pHead==null) return null;ListNode pre=null;ListNode p=pHead;while(p!=null) {if(p.next!=null&&p.val==p.next.val) {int val=p.val;while(p.next!=null&&p.next.val==val) {p=p.next; //因为重复的数值不止一次,先不断的移动节点p.} p=p.next;//最后退出循环,是因为p.next.val不是相同数值,则将p移动到p.nextif(pre==null) {pHead=p; //如果此时pre=null,则表明,没有进行else语句,表明头结点就是重复节点 //这是关键一步,如果重复的节点就是头节点,则要将pHead重新置为p.next}else {pre.next=p;}}else {pre=p;//将pre节点向后移动,始终保证pre节点在p节点的前面 //与pre.next=p的区别是,pre节点没有移动,只是将pre和p节点连接起来 //与pre=pre.next的区别是,必须先保证pre.next指向p p=p.next;}}return pHead;//最后返回的是pHead }
这种方法没有采用返回dummy.next这种下一个节点的方式,主要原因就是因为下一个头结点会改变。
阅读全文
0 0
- 剑指_18.删除链表中的重复数字
- LintCode-删除排序链表中的重复数字 II
- 删除排序链表中的重复数字 II
- 题目:删除排序链表中的重复数字 II
- lintcode-删除排序链表中的重复数字II-113
- 删除排序链表中的重复数字 II
- 删除排序链表中的重复数字 II
- 删除排序链表中的重复数字 II
- lintcode-删除排序链表中的重复数字 II
- LintCode(M)删除排序链表中的重复数字 II
- lintcode,删除排序链表中的重复数字 II
- LintCode 删除排序链表中的重复数字 II
- 删除排序链表中的重复数字 II -LintCode
- 删除排序链表中的重复数字 II -LintCode
- [LintCode]113.删除排序链表中的重复数字 II
- LintCode删除排序链表中的重复数字 II
- lintcode--删除排序链表中的重复数字
- lintcode删除排序链表重复数字
- 序列化代理模式
- 线性表的顺序存储实现c语言
- constraint的一些用法总结
- 第五届图灵杯1861
- 3、条件加载Bean——@Conditional
- 剑指_18.删除链表中的重复数字
- 记一次小米2S的刷机过程
- 获取之前发布的webService服务
- cjqyzUsers
- Hello_World 我的学习路线
- Redis学习笔记——(三)Redis集群安装
- 导弹拦截之测试版(1163)
- 您不知道的 5 件事... Java 对象序列化
- 不定期更新一些常见/不常见的缩写全称