[LeetCode] #19 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.

题目很简单,设置两个指针相隔n-1,一起走,走后一个指针走到头时,前一个指针正好在要删除的节点位置。要注意链表长度小于n的情况。时间:7ms。

我的代码:

/**
* 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 || n == 0)
            return head;
        ListNode *pf, *pl,*temp=NULL;
        pf = pl = head;
        int i = 0;
        for (; i < n-1; ++i){
            if (pl->next)
                pl = pl->next;
            else
                return head;
        }
        while (pl->next){
            temp = pf;
            pl = pl->next;
            pf = pf->next;
        }
        if (temp == NULL){
            head = pf->next;
            delete pf;
        }
        else{
            temp->next = pf->next;
            delete pf;
        }
        return head;
    }
};
“If you give someone a program, you will frustrate them for a day; if you teach them how to program, you will frustrate them for a lifetime.”
原文地址:https://www.cnblogs.com/Scorpio989/p/4450913.html