2095. 删除链表的中间节点 - 力扣(LeetCode)


可以使用快慢指针的方法来找到并删除链表的中间节点:
思路:
- 使用快慢指针找到中间节点:
- 快指针
fast每次走两步 - 慢指针
slow每次走一步 - 当
fast走到链表末尾时,slow就指向了中间节点
- 快指针
- 删除中间节点:
- 让
slow的前一个节点的next指向slow.next - 需要一个
prev指针来跟踪slow的前一个节点
- 让
- 边界情况:
- 如果链表长度为
1,直接返回None
- 如果链表长度为
代码实现:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def deleteMiddle(head: ListNode) -> ListNode:
if not head or not head.next:
return None # 只有一个节点时,删除后返回 None
slow, fast = head, head
prev = None # 记录 slow 的前一个节点
while fast and fast.next:
prev = slow
slow = slow.next
fast = fast.next.next # 快指针走两步,慢指针走一步
# 删除中间节点
prev.next = slow.next
return head
示例测试
def print_list(head):
while head:
print(head.val, end=" -> ")
head = head.next
print("None")
# 创建链表 1 -> 2 -> 3 -> 4 -> 5
head = ListNode(1, ListNode(2, ListNode(3, ListNode(4, ListNode(5)))))
print_list(deleteMiddle(head)) # 输出: 1 -> 2 -> 4 -> 5 -> None
✅ 时间复杂度:O(n)
✅ 空间复杂度:O(1)
411

被折叠的 条评论
为什么被折叠?



