链表输入后删除倒数第K个节点
时间: 2024-09-25 17:06:43 浏览: 31
链表是一种线性的数据结构,其中每个节点包含数据以及指向下一个节点的指针。若要在链表中删除倒数第 K 个节点,我们需要遍历整个链表找到第 K 个节点,然后从该节点的前一个节点处断开连接,使其成为新的已删除节点的直接前驱。
以下是步骤:
1. 初始化两个指针,`prev` 和 `curr`,分别指向头节点和第二个节点。
2. 开始一个循环,迭代 K 次,每次将 `curr` 向后移动一位。
3. 在循环过程中,更新 `prev` 的指向,使其始终记住倒数第 K 个位置之前的实际节点。
4. 当循环结束时,`prev` 就会停在倒数第 K+1 个节点,因为已经向前移动了 K 次。此时,`prev` 的后一个节点就是我们要删除的目标节点。
5. 删除操作:`prev` 的 `next` 指向 `curr` 的下一个节点,断开目标节点与链表的联系。
```python
def delete_kth_from_end(head, k):
if not head or not head.next:
return None
slow = fast = head
for _ in range(k): # 找到倒数第k个节点的前一个节点
fast = fast.next if fast else None
if not fast: # 如果k等于链表长度,那么第一个元素就是目标
head = head.next
else: # 正常情况,快慢指针相遇点的前一个节点即为目标
slow = slow.next
prev_node = slow
while slow.next:
prev_node = slow
slow = slow.next
prev_node.next = slow.next # 断开连接
return head
```
阅读全文