描述
在单链表中,删除从尾部算起的第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; i<k; i++) {
q = q->next;
}
//共同走
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)。
网友评论