030-从单链表尾部算删除第k个节点

描述

在单链表中,删除从尾部算起的第k个节点。

输入:

​ 1->2->3->4->5,k=2

输出:

​ 1->2->3->5

补充:

  • k的取值永远是合法的;
  • 在一次循环中完成

分析

设置两个指针p、q,让q先走k步,然后p、q一起走,直到q走到尾节点,删除p->next即可。

实现

ListNode *removeKthNodeFromTheEndoflist(ListNode *head, int k)
{
    ListNode dummy(INT_MIN);
    dummy.next = head;
    ListNode *p = &dummy;
    ListNode *q = &dummy;
    for(int i=0; inext;
    }
    
    //共同走
    while (q->next) {
        p = p->next;
        q = q->next;
    }
    
    // 删除p->next
    ListNode *temp = p->next;
    p->next = p->next->next;
    delete temp;
    
    return dummy.next;
}

时间复杂度为O(n),空间复杂度为O(1)

你可能感兴趣的:(030-从单链表尾部算删除第k个节点)