标签:
/* * 19. Remove Nth Node From End of List * 2016-4-15 By Mingyang * 最后n个点不好算,但是可以从前面开始算第n个点定一个fast node,然后再来一个slow node。 * 不过需要注意的细节就是,如果fast移动n个以后变成了null就表明需要移除掉的就是head */ public static ListNode removeNthFromEnd11(ListNode head, int n) { if(head==null||n<0) return null; if(n==0) return head; ListNode slow=head; ListNode fast=head; while(n>0&&fast!=null){ fast=fast.next; n--; } if(n>0) return head; if(n==0&&fast==null) return head.next; while(fast.next!=null){ fast=fast.next; slow=slow.next; } slow.next=slow.next.next; return head; } /* * 上面是我的代码,下面是别人的代码,更整洁一点, * 因为题目把难度降低了:Given n will always be valid. * 这样n大于长度的条件就不用判定了 * 特殊case就是: 1,2 remove 第二个 1 remove 第一个 等 * 总结起来无非就是只有1个remove这一个,很多个但是remove第一个,其他情况 */ public ListNode removeNthFromEnd(ListNode head, int n) { ListNode slow = head; ListNode fast = head; if (head.next == null) return null;//1 remove 第一个 for (int i = 1; i <= n; i++) { fast = fast.next; } // 1,2 remove 第二个 if (fast == null) { head = head.next; return head; } while (fast.next != null) { fast = fast.next; slow = slow.next; } slow.next = slow.next.next; return head; }
19. Remove Nth Node From End of List
标签:
原文地址:http://www.cnblogs.com/zmyvszk/p/5398188.html