码迷,mamicode.com
首页 > 其他好文 > 详细

19. Remove Nth Node From End of List

时间:2016-04-16 13:57:00      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:

    /*
     * 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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!