返回信息流要求删除数字重复的节点~
我想用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 ;
}
这是一条镜像帖。来源:北邮人论坛 / java / #49685同步于 2016/4/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
【新手请教】leetcode删数字重复的节点~easy题,然而还是没搞出
Ykxpb
2016/4/24镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
当输入[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
}
}
}
嗷嗷 先谢谢惹~~~嘿嘿 没标题号就知道是那道题 一定是刷了好多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){
: ...................
直接设为null是没有用的,因为上一个节点的next指针还指向它,你只是把你自己的引用置空了
【 在 Ykxpb (nicheng) 的大作中提到: 】
: 嗷嗷 先谢谢惹~~~嘿嘿 没标题号就知道是那道题 一定是刷了好多leetcode 膜拜下,,,
: 然后。。。
: 1 我也发现不用set就可以的,,,但是刚开始读题时没注意,,囧 但是想着既然有问题还是得解决问题
: ...................
、
哦哦
就是我删除最后一个节点的方式不对。。。3Q
【 在 dss886 的大作中提到: 】
: 直接设为null是没有用的,因为上一个节点的next指针还指向它,你只是把你自己的引用置空了