public ListNode removeNthFromEnd(ListNode head, int n) { if(head==null) return null; if(n==0)//如果n==0 return head; Map<Integer,ListNode> map=new HashMap<Integer, ListNode>(); int i=0; ListNode temp=head; do { map.put(++i, temp); temp=temp.next; } while(temp!=null); if(n>i)//if n > length return head; //now n>0 && n<=i map.remove(i+1-n); //if first if(n==1) { if(i==1) return null; ListNode listNode=map.get(i-1); listNode.next=null;//假如只是将listNode置空,并没有什么卵用,结果会输出全部,因为前一个对象保存着该对象的引用 return head; } //if end if(n==i) return map.get(2); //从n开始往后重新链接 map.get(i-n).next=map.get(i+2-n); return head; }
这里很需要注意的地方:
1、map里面存放的是对象的引用,remove只是删除集合中对象的引用
2、这道题中,假如只是将引用指向null,并不能将销毁对象本身,在链表中,还有其他地方引用了该对象。
3、考虑问题要全面,以后每次做题要将所有情况都列出来!
时间: 2024-09-30 15:06:13