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

刪除連結串列的倒數第N個節點(leetcode)

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

示例:

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

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

說明:

給定的 n 保證是有效的。

進階:

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

思路:雙指標 fisrt指標先走n步,再同時和sec指標走,當first的next為null時,sec的next即為要刪除的節點。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {
    struct ListNode* first=head;
    while(n--)
    {
        first=first->next;
    }
    if(!first)
        return head->next;
    struct ListNode*sec=head;
    while(first->next!=NULL)
    {
        first=first->next;
        sec=sec->next;
    }
    sec->next=sec->next->next;
    return head;
    
}