p101 移除单链表倒数第 n 个节点(leetcode 19)

一:解题思路

注意如果n大于链表长度,说明要删除的节点不在链表中,直接返回原始链表就行。Time:O(k),Space:O(1),k为链表长度

二:完整代码示例 (C++版和Java版)

C++:

class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) 
    {
        ListNode* dummy = new ListNode(0);
        dummy->next = head;
        ListNode* p = dummy;
        ListNode* q = dummy;

        for (; n > 0 && q->next != NULL; n--) q = q->next;
        if (n != 0) return dummy->next;

        while (q->next != NULL)
        {
            p = p->next;
            q = q->next;
        }

        p->next = p->next->next;

        return dummy->next;
    }
};

 

Java:

class Solution {
        public ListNode removeNthFromEnd(ListNode head, int n)
        {
               ListNode dummy=new ListNode(0);
               dummy.next=head;
               ListNode p=dummy,q=dummy;

               for(;n>0 && q.next!=null;n--) q=q.next;
               if(n!=0) return dummy.next;

               while(q.next!=null)
               {
                   p=p.next;
                   q=q.next;
               }
               p.next=p.next.next;

               return dummy.next;
        }
    }

 

posted @ 2020-04-07 20:29  repinkply  阅读(114)  评论(0)    收藏  举报