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

 

Hide Tags
  Linked List Two Pointers
 

  简单的快慢指针问题。
#include <iostream>

using namespace std;



/**

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

        if(head==NULL)  return NULL;

        ListNode * fastp = head, * slowp = head;

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

            fastp = fastp->next;

        if(fastp==NULL) return head->next;

        while(fastp->next!=NULL){

            fastp = fastp ->next;

            slowp = slowp ->next;

        }

        slowp->next = slowp->next->next;

        return head;

    }

};



int main()

{

    return 0;

}

 

你可能感兴趣的:(LeetCode)