[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.

解题思路:

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) {

        ListNode *first = head, *second = head;

        if(first == NULL) return NULL;

        for(int i = 0;i < n;i++)

        {

            if(i == n - 1 && first -> next == NULL) return head -> next;

            else first = first -> next;

        }

        while(first -> next != NULL)

        {

            first = first -> next;

            second = second -> next;

        }

        

        ListNode *tmp = second -> next;

        second -> next = tmp -> next;

        delete tmp;

        return head;

    }

};

你可能感兴趣的:(LeetCode)