Python中链表的插入和删除操作详解

2023-04-11 00:00:00 插入 链表 详解

链表是一种常见的数据结构,其中每个节点包含数据和指向下一个节点的指针。Python中可使用类或字典等方式实现链表。以下是链表的插入和删除操作的详细解释和示例代码。

  1. 插入操作

链表插入操作往往需要指定插入位置和插入的数据。以下是在链表末尾插入新节点的示例代码:

class Node:
    def __init__(self, data=None):
        self.data = data
        self.next = None

class LinkedList:
    def __init__(self):
        self.head = None

    def append(self, data):
        new_node = Node(data)
        if self.head is None:
            self.head = new_node
            return
        last_node = self.head
        while last_node.next:
            last_node = last_node.next
        last_node.next = new_node

上述代码中,我们定义了两个类:Node和LinkedList。Node类表示链表中的节点,包含数据部分和指向下一个节点的指针。LinkedList类则表示整个链表,并提供了一个方法append(),将数据插入到链表末尾。

如果链表为空(即self.head为None),则直接将新节点作为头节点。否则,从头节点开始遍历到链表末尾的最后一个节点,将新节点插入末尾。

以下是将新节点插入链表中间位置的示例代码:

class LinkedList:
    # 如上方定义

    def insert(self, prev_node, data):
        if not prev_node:
            print("Previous node is not in the list")
            return
        new_node = Node(data)
        new_node.next = prev_node.next
        prev_node.next = new_node

在insert()方法中,我们需要指定插入位置——即要插入节点的前一个节点。如果前一个节点不存在(即prev_node为None),则打印错误信息并返回。否则,创建一个新节点,将其next指针指向prev_node的下一个节点,再将prev_node的next指针指向新节点,即完成插入操作。

以下是插入“pidancode.com”节点到头节点后面的示例代码:

linked_list = LinkedList()
linked_list.head = Node("笔记")
node2 = Node("应用")
node3 = Node("教程")
linked_list.head.next = node2
node2.next = node3

new_node = Node("pidancode.com")
new_node.next = linked_list.head.next
linked_list.head.next = new_node

# 输出链表
curr_node = linked_list.head
while curr_node:
    print(curr_node.data)
    curr_node = curr_node.next

输出:

笔记
pidancode.com
应用
教程
  1. 删除操作

链表的删除操作同样需要指定节点位置。以下是删除链表中某个节点的示例代码:

class LinkedList:
    # 如上方定义

    def delete_node(self, key):
        curr_node = self.head
        if curr_node and curr_node.data == key:
            self.head = curr_node.next
            curr_node = None
            return

        prev_node = None
        while curr_node and curr_node.data != key:
            prev_node = curr_node
            curr_node = curr_node.next

        if curr_node is None:
            return

        prev_node.next = curr_node.next
        curr_node = None

在delete_node()方法中,我们遍历链表,找到要删除的节点并将其从中删除。首先判断头节点是否为要删除节点,如果是,则将头节点指向下一个节点。如果不是,再遍历到对应节点并删除。

以下是删除“皮蛋编程”节点的示例代码:

linked_list = LinkedList()
linked_list.head = Node("笔记")
node2 = Node("应用")
node3 = Node("皮蛋编程")
linked_list.head.next = node2
node2.next = node3

linked_list.delete_node("皮蛋编程")

# 输出链表
curr_node = linked_list.head
while curr_node:
    print(curr_node.data)
    curr_node = curr_node.next

输出:

笔记
应用

通过以上示例代码,我们可以学会链表的插入和删除操作,这是学习Python数据结构和算法的重要基础之一。

相关文章