BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #49685同步于 2016/4/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

【新手请教】leetcode删数字重复的节点~easy题,然而还是没搞出

Ykxpb
2016/4/24镜像同步4 回复
要求删除数字重复的节点~ 我想用set判断是否重复 然后如果重复 那么删除这个节点 大概是这个思路。。可是不晓得为啥不对 //然后看了discuss已经晓得怎么做了 只是不懂为啥我的不会 求大神指导 哪儿出了问题~~ /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ public ListNode deleteDuplicates(ListNode head) { HashSet<Integer> set= new HashSet<Integer>(); if(head ==null) return head ; else{ ListNode n= head; while(n !=null){ if(!set .contains(n.val)){ set.add(n.val); n= n. next; } else{ if(n.next!=null){ n.val=n.next.val; n. next= n. next. next; } else{ n= null; } } } return head ; }
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
dss886机器人#1 · 2016/4/24
当输入[1, 1]的时候总共2次循环,一次进了A,一次进了B,n直接就变成null跳出了,仍然返回的是[1, 1],后面一个if-else的判断逻辑不对。。。另外这题是排序好的链表,直接判断大小就可以了,没必要用set while(n !=null){ if(!set .contains(n.val)){ set.add(n.val); n= n. next; // A } else{ if(n.next!=null){ n.val=n.next.val; n. next= n. next. next; } else{ n= null; // B } } }
Ykxpb机器人#2 · 2016/4/24
嗷嗷 先谢谢惹~~~嘿嘿 没标题号就知道是那道题 一定是刷了好多leetcode 膜拜下,,, 然后。。。 1 我也发现不用set就可以的,,,但是刚开始读题时没注意,,囧 但是想着既然有问题还是得解决问题 2 我写的第二个if-else 我想实现的功能是这样的: 当重复节点不是尾巴节点时 删除该节点; 当重复节点是最后一个节点时,我就直接把这个节点设为空,直接删掉【不知道这么对不对哎】 在这里,输入[1,1] 那么我应该留把第二个1删掉 然后再判断时n=null 跳出循环。。。 然后 我也大概知道空的时候跳出循环了 但是我觉得我在跳出之前 已经把节点删掉了哎 为啥没能修改呢????【原谅我的小白】 【 在 dss886 的大作中提到: 】 : 当输入[1, 1]的时候总共2次循环,一次进了A,一次进了B,n直接就变成null跳出了,仍然返回的是[1, 1],后面一个if-else的判断逻辑不对。。。另外这题是排序好的链表,直接判断大小就可以了,没必要用set : [code=java] : while(n !=null){ : ...................
dss886机器人#3 · 2016/4/24
直接设为null是没有用的,因为上一个节点的next指针还指向它,你只是把你自己的引用置空了 【 在 Ykxpb (nicheng) 的大作中提到: 】 : 嗷嗷 先谢谢惹~~~嘿嘿 没标题号就知道是那道题 一定是刷了好多leetcode 膜拜下,,, : 然后。。。 : 1 我也发现不用set就可以的,,,但是刚开始读题时没注意,,囧 但是想着既然有问题还是得解决问题 : ...................
Ykxpb机器人#4 · 2016/4/24
、 哦哦 就是我删除最后一个节点的方式不对。。。3Q 【 在 dss886 的大作中提到: 】 : 直接设为null是没有用的,因为上一个节点的next指针还指向它,你只是把你自己的引用置空了