1. 程式人生 > >leetcode 19. 刪除連結串列的倒數第N個節點 C語言版

leetcode 19. 刪除連結串列的倒數第N個節點 C語言版

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

示例:

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

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

這個題目可以用一次遍歷來完成。

定義一個節點向後遍歷,當走了n個節點後,第二個節點從頭節點出發,兩個節點一起向後遍歷。

遍歷結束時,第二個節點的位置就是倒數第n個節點。

struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {
    int i=0;
    struct ListNode* p,* q = head;
    p = (struct ListNode*)malloc(sizeof(struct ListNode));
    p->next = head;
    while(i<n)
    {
        q = q -> next;
        i++;
    }
    while(q != NULL)
    {
        q = q -> next;
        p = p -> next;
    }
    if(p -> next == head)
        return head -> next;
    else
        p->next = p->next ->next;
    return head;
}