思想:快指针先走到第k个结点。然后快慢指针一起往后走,当快指针指向最后一个结点的时候,慢指针就是倒数第k个结点
// 删除倒数第K个结点
public static Node deleteLastKth(Node list, int k) {
Node fast = list;
int i = 1;
while (fast != null && i < k) {
fast = fast.next;
++i;
}
//k过大,已经走到末尾了
if (fast == null) return list;
Node slow = list;
Node prev = null;
//fast指向最后一个结点
while (fast.next != null) {
fast = fast.next;
//需要保存父节点
prev = slow;
slow = slow.next;
}
//如果k刚好就是链表的长度,删除第一个
if (prev == null) {
list = list.next;
} else {
prev.next = prev.next.next;
}
return list;
}
链表删除倒数第k结点
最新推荐文章于 2021-02-21 10:32:05 发布