1. 程式人生 > >[leetcode][刪除連結串列的倒數第N個節點]

[leetcode][刪除連結串列的倒數第N個節點]

給定一個連結串列,刪除連結串列的倒數第 個節點,並且返回連結串列的頭結點。

示例:

給定一個連結串列: 1->2->3->4->5, 和 n = 2.

當刪除了倒數第二個節點後,連結串列變為 1->2->3->5.

說明:

給定的 n 保證是有效的。

進階:

你能嘗試使用一趟掃描實現嗎?

不想用兩個間距點一起跑的方法,用個佇列吧。。。

/**
 * 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) {
        queue<ListNode*> quePos;
        ListNode* p=head;
        while(p)
        {
            if(quePos.size()<=n) quePos.push(p);
            else {quePos.pop();quePos.push(p);}
            p=p->next;
        }
        if(quePos.size() == n)
        {
            p=head->next;
            delete head;
            return p;
        }
        else
        {
            p=quePos.front();
            ListNode* q=p->next;
            p->next=p->next->next;
            delete q;
            return head;
        }
    }
};