Skip to content

Latest commit

 

History

History
35 lines (30 loc) · 1.19 KB

19.md

File metadata and controls

35 lines (30 loc) · 1.19 KB

19. Remove Nth Node From End of List

题目链接

题目的要求是移除倒数第n个结点,那么首先从头结点开始遍历,遍历n次,此时这个结点(成为e结点)和头结点的距离就为n,这是从e节点和头结点 同时开始遍历,那么当e结点遍历到尾部的时候,从头结点开始遍历的那个节点就为倒数第n个结点。

要处理的一个边界情况是,当n恰好等于链表的长度的时候,也就是要移除第一个结点,这时候要把head至为head->next,并返回

(discuss中一个消除边界情况的方法:新建一个结点并申请内存,将该节点的next域指向head)

struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {

    struct ListNode *end = head;
    struct ListNode *cur = head;
    int i = 0;
    //find before end
    for (i; i < n; i++)
    {
        cur = cur ->next;
    }
    if (cur == NULL)
        return head ->next;
    while (cur ->next != NULL)
    {
        cur = cur ->next;
        end = end ->next;
    }
    cur = end ->next;
    end ->next = cur ->next;
    free(cur);
    cur = NULL;
    return head;
}