📌  相关文章
📜  编写一个删除链表的函数(1)

📅  最后修改于: 2023-12-03 14:56:57.454000             🧑  作者: Mango

删除链表的函数

在编写程序时,我们经常需要删除链表中的某个节点。链表是由一系列节点组成的数据结构,每个节点包含一个值和指向下一个节点的指针。删除链表节点的操作比较常见,可以通过修改节点指针的方式来实现,但需要注意处理边界情况和内存释放。

删除链表节点的算法

删除链表节点的算法主要分为以下几个步骤:

  1. 如果要删除的节点是链表头节点,直接将链表头指针指向下一个节点即可。
  2. 如果要删除的节点不是链表头节点,则需要遍历链表找到要删除的节点的前一个节点。
  3. 修改前一个节点的指针,跳过要删除的节点,指向要删除节点的下一个节点。
  4. 释放要删除的节点的内存空间。

下面是一个示例的删除链表函数的实现:

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next


def deleteNode(head: ListNode, val: int) -> ListNode:
    # 处理链表头节点
    if head.val == val:
        return head.next
    
    # 遍历链表找到要删除的节点的前一个节点
    prev = head
    while prev.next and prev.next.val != val:
        prev = prev.next
    
    # 修改前一个节点的指针,跳过要删除的节点
    if prev.next:
        prev.next = prev.next.next
    
    return head
示例

下面是一个示例的链表和删除操作的调用过程:

# 构造一个链表: 1 -> 2 -> 3 -> 4 -> 5
head = ListNode(1)
head.next = ListNode(2)
head.next.next = ListNode(3)
head.next.next.next = ListNode(4)
head.next.next.next.next = ListNode(5)

# 删除节点值为3的节点
new_head = deleteNode(head, 3)

# 遍历删除后的链表
while new_head:
    print(new_head.val)
    new_head = new_head.next

输出结果:

1
2
4
5
总结

删除链表节点是一项常见的操作,通过修改节点指针的方式,我们可以实现删除链表中的特定节点。在实现时,需要注意处理链表头节点和释放内存空间。编写一个高效、安全的删除链表函数,可以提高程序的代码质量和性能。