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

思考:设两个指针一前一后间隔n-1个元素。分两种情况。

/**

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

        // IMPORTANT: Please reset any member data you declared, as

        // the same Solution instance will be reused for each test case.

        ListNode *p,*q,*r;

		p=head;

		r=head;

		while(n--)

			p=p->next;

		if(p==NULL) 

		{

			head=r->next;

			delete r;

		}

		else

		{

			while(p->next)

			{

				r=r->next;

				p=p->next;

			}

			q=r->next;

			r->next=q->next;

			delete q;

		}

		return head;

    }

};

  

你可能感兴趣的:(LeetCode)