Remove Nth Node From End of List

来源:互联网 发布:nba竞猜软件 编辑:程序博客网 时间:2024/06/15 10:32

删除倒数第k个节点,和返回倒数第k个节点一样,双指针法,q先移动k步,然后p、q一块移动。不同的是,最后q要停留在最后一个节点而不是NULL上,这样,p停留在倒数第k前一个节点上,然后删除节点操作。特殊情况:需要删除的是head,这时候第一步q已经是NULL了。

ListNode *removeNthFromEnd(ListNode *head, int n) {    ListNode dummy(-1);    dummy.next = head;    auto q = head;    int i = 0;    for (; q && i < n; q = q->next, ++i) ;    if (i < n) return head;    auto p = &dummy;    for (; q; p = p->next, q = q->next) ;    auto tmp = p->next;    p->next = tmp->next;    delete tmp;    return dummy.next;}


0 0