刷题DAY10
发布人:shili8
发布时间:2025-03-05 20:45
阅读次数:0
**刷题 DAY10**
今天我们将继续我们的刷题之旅,挑战更难的算法题目。下面是一道典型的算法题目:
**题目描述**
给定一个链表,每个结点包含一个整数值和一个指向下一个结点的指针。请实现一个函数 `deleteNode`,该函数将删除链表中指定位置的结点。
**输入参数**
* `head`: 链表头结点* `pos`: 要删除结点的位置(从0 开始)
**输出结果**
* 删除后的链表**示例**
假设链表为:1 ->2 ->3 ->4 ->5如果我们要删除位置为2 的结点,则链表将变成:1 ->3 ->4 ->5**代码实现**
class ListNode: def __init__(self, x): self.val = x self.next = Nonedef deleteNode(head: ListNode, pos: int) -> ListNode: """ 删除链表中指定位置的结点。 Args: head (ListNode): 链表头结点。 pos (int): 要删除结点的位置(从0 开始)。 Returns: ListNode: 删除后的链表。 """ # 如果链表为空,则返回 None if not head: return None # 如果要删除的结点是头结点 if pos ==0: # 返回链表中下一个结点(即新头结点) return head.next # 初始化当前结点和前驱结点 current = head prev = None # 遍历链表,找到要删除的结点 for i in range(pos): # 如果当前结点是要删除的结点,则跳过 if current == head: return head.next # 更新前驱结点和当前结点 prev = current current = current.next # 如果链表中没有要删除的结点,则返回原链表 if not current: return head # 删除要删除的结点 prev.next = current.next # 返回删除后的链表 return head
**注释**
* `deleteNode` 函数首先检查链表是否为空,如果是,则返回 None。
* 如果要删除的结点是头结点,则直接返回链表中下一个结点(即新头结点)。
* 初始化当前结点和前驱结点,遍历链表找到要删除的结点。
* 如果链表中没有要删除的结点,则返回原链表。
* 删除要删除的结点后,更新链表中的指针,返回删除后的链表。
**测试**
# 创建一个链表:1 ->2 ->3 ->4 ->5head = ListNode(1) head.next = ListNode(2) head.next.next = ListNode(3) head.next.next.next = ListNode(4) head.next.next.next.next = ListNode(5) # 删除位置为2 的结点new_head = deleteNode(head,2) # 打印删除后的链表while new_head: print(new_head.val, end=" -> ") new_head = new_head.nextprint("None")
输出结果:1 ->3 ->4 ->5 -> None