📌  相关文章
📜  用于在从末尾开始的第 N 个节点之后插入一个节点的Python程序(1)

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

在从末尾开始的第 N 个节点之后插入一个节点,

如果我们有一个单链表,并且需要在从末尾开始的第 N 个节点之后插入一个节点,那么我们可以使用以下Python程序来完成此任务。

程序说明

该Python程序主要使用了链表的概念和节点操作。链表是由一个个节点组成的数据结构,每个节点包含数据存储和指向下一个节点的指针。通过对节点的操作,我们可以对链表进行各种操作,比如插入、删除、查找等。

这个程序的主要思路是:

  1. 遍历链表,找到要插入节点的位置。
  2. 创建一个新节点,并将其插入到链表中。
代码实现
class Node:
    def __init__(self, data):
        self.data = data
        self.next = None


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

    def append(self, data):
        new_node = Node(data)
        if not self.head:
            self.head = new_node
            return
        curr_node = self.head
        while curr_node.next:
            curr_node = curr_node.next
        curr_node.next = new_node

    def insert_after(self, n, data):
        new_node = Node(data)
        curr_node = self.head
        count = 1
        while curr_node:
            if count == n:
                temp_node = curr_node.next
                curr_node.next = new_node
                new_node.next = temp_node
                return
            curr_node = curr_node.next
            count += 1
        raise ValueError("Node not found in the list")


def main():
    linked_list = LinkedList()
    linked_list.append(1)
    linked_list.append(2)
    linked_list.append(3)
    linked_list.insert_after(2, 4)
    curr_node = linked_list.head
    while curr_node:
        print(curr_node.data)
        curr_node = curr_node.next


if __name__ == '__main__':
    main()
代码解释

首先,我们定义了一个Node类,它有一个data属性和一个next指针,指向下一个节点。接着,我们定义了一个LinkedList类,包含一个head指针,指向链表的头部节点。

我们使用append方法将元素添加到链表的末尾。接下来,我们定义了一个insert_after方法,它用于在从末尾开始的第N个节点之后插入一个节点。该方法需要两个参数,一个是要插入的节点的位置N,另一个是要插入的数据。

我们首先创建一个新节点,并设置它的数据为要插入的数据。然后,我们使用curr_node变量遍历链表,计算当前节点的位置。如果当前节点是要插入节点的前一个节点(即当前节点是第N个节点),那么我们将新节点插入到当前节点之后,并更新新节点的next指针,使其指向后面的节点。

最后,我们在while循环中遍历链表,并打印出每个节点的数据。

结论

该Python程序可以有效地在从末尾开始的第N个节点之后插入一个新节点。它演示了链表的基本概念和节点操作,并提供了一个简单而有效的解决方案。