19. Remove Nth Node From End of

2016-10-19  本文已影响0人  LonelyGod小黄老师

Problem:

Remove Nth Node From End of List and return its head.
For example,

Given linked list: 1->2->3->4->5, and n = 2. 
After removing the second node from the end, the linked list becomes 1->2->3->5.

Note: Given n will always be valid. Try to do this in one pass.

Solution:

two pointers

class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode * it = head;
        ListNode * fast = head;
        if(head -> next == NULL) return NULL; //important
        for(int i = 0;i < n; i++)
        {
            fast = fast -> next;
        }
        if(fast == NULL) //important
        {
            head = it -> next;
            delete it;
            return head;
        }
        while(fast->next != NULL)
        {
            fast = fast->next;
            it = it ->next;
        }
        if(it->next != NULL)
        {
            ListNode* discard = it -> next;
            it->next = it->next->next;
            delete discard;
        }
        return head;
    }
};

Memo:

Always check the edge cases!!!
Check validation for all it->next operation!!!!!

上一篇下一篇

猜你喜欢

热点阅读