📌  相关文章
📜  用于在给定位置删除链表节点的Python程序(1)

📅  最后修改于: 2023-12-03 15:40:53.581000             🧑  作者: Mango

用于在给定位置删除链表节点的Python程序

简介

本程序实现了在给定位置删除链表节点的操作。链表是一种常用的数据结构,它由若干个节点组成,每个节点包含了数据以及指向下一个节点的指针。删除链表节点是常见的操作之一,本程序可以在任意位置删除链表节点。

代码实现
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def delete_node(head: ListNode, pos: int) -> ListNode:
    if not head:
        return

    if pos == 1:
        return head.next

    cur_node = head
    for _ in range(pos-2):
        if cur_node is None:
            break
        cur_node = cur_node.next

    if not cur_node:
        return head
    if not cur_node.next:
        return head

    cur_node.next = cur_node.next.next
    return head
代码解析

本程序实现了一个链表节点的定义和一个删除链表节点的函数。ListNode类定义了一个链表节点,其包含val和next两个属性,其中val表示节点的数据,next表示指向下一个节点的指针。

delete_node函数实现了在给定位置pos删除链表节点的操作。参数head表示链表的头结点,pos表示要删除的节点在链表中的位置。如果链表为空,直接返回空;如果要删除的节点是头结点,直接返回头结点的下一个节点。之后遍历链表,找到要删除的节点的前一个节点,然后修改节点的指针即可删除节点。如果要删除的节点的位置超出了链表的长度,则直接返回头结点。

示例运行

为了便于演示,我们首先创建一个链表,然后在位置2删除一个节点,然后输出删除后的链表。代码如下:

head = ListNode(1, ListNode(2, ListNode(3, ListNode(4, ListNode(5)))))
pos = 2
new_head = delete_node(head, pos)

cur_node = new_head
while cur_node:
    print(cur_node.val, end=' ')
    cur_node = cur_node.next

输出结果为:1 3 4 5。可以看出成功删除了位置为2的节点。