LeetCode_Remove Nth Node From End of List

Given a linked list, remove the nth node from the 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.

 

/**

 * Definition for singly-linked list.

 * struct ListNode {

 *     int val;

 *     ListNode *next;

 *     ListNode(int x) : val(x), next(NULL) {}

 * };

 */

class Solution {

public:

    ListNode *removeNthFromEnd(ListNode *head, int n) {

        // Start typing your C/C++ solution below

        // DO NOT write int main() function

        ListNode *p, *q, *pre;

        p = q = head;

        int i = 1;

        while(q && i<n)

        {

            q = q->next;

            i++;

        }

        if(i < n) return head;

        

        while(q->next)

        {

            pre = p;

            p = p->next;

            q = q->next;

        }

        

        if(p == head)

            head = head->next;

          else

            pre->next = p->next;    

    

        delete p;

        return head;



    }

};

 

你可能感兴趣的:(LeetCode)