当前位置:实例文章 » JAVA Web实例» [文章]刷题DAY10

刷题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

其他信息

其他资源

Top