返回

用简洁的方法学习Python链表实践

见解分享

一、链表的基本概念

链表是一种数据结构,它由一系列节点组成,每个节点包含一个数据项和一个指针指向下一个节点。链表中的第一个节点称为头结点,最后一个节点称为尾结点。

二、操作链表的基本方法

  1. 创建链表:创建一个链表需要给定链表中第一个节点的值,然后依次给定各个节点的值,直到最后一个节点。
  2. 查找节点:可以通过线性查找或二分查找等方法查找链表中的某个节点。
  3. 插入节点:在链表中的某个节点后插入一个新节点,需要先找到该节点,然后将新节点插入到该节点的后面。
  4. 删除节点:删除链表中的某个节点,需要先找到该节点,然后将该节点从链表中删除。

三、链表的应用场景

链表广泛应用于各种数据结构和算法中,例如栈、队列、哈希表等。此外,链表还用于表示字符串、图等数据结构。

四、Python中的链表实现

Python中可以通过使用列表来实现链表。列表是一种动态数组,它可以存储任意数量的数据项。使用列表实现链表时,可以使用列表的索引来访问链表中的元素。

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

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

    def insert_at_head(self, value):
        new_node = Node(value)
        if self.head is None:
            self.head = new_node
            self.tail = new_node
        else:
            new_node.next = self.head
            self.head = new_node

    def insert_at_tail(self, value):
        new_node = Node(value)
        if self.tail is None:
            self.head = new_node
            self.tail = new_node
        else:
            self.tail.next = new_node
            self.tail = new_node

    def remove_at_head(self):
        if self.head is None:
            return
        if self.head == self.tail:
            self.head = None
            self.tail = None
        else:
            self.head = self.head.next

    def remove_at_tail(self):
        if self.tail is None:
            return
        if self.head == self.tail:
            self.head = None
            self.tail = None
        else:
            current_node = self.head
            while current_node.next != self.tail:
                current_node = current_node.next
            current_node.next = None
            self.tail = current_node

    def print_list(self):
        current_node = self.head
        while current_node is not None:
            print(current_node.value, end=" ")
            current_node = current_node.next
        print()

if __name__ == "__main__":
    linked_list = LinkedList()
    linked_list.insert_at_head(1)
    linked_list.insert_at_tail(2)
    linked_list.insert_at_head(3)
    linked_list.insert_at_tail(4)
    linked_list.print_list()  # 输出:3 1 2 4
    linked_list.remove_at_head()
    linked_list.remove_at_tail()
    linked_list.print_list()  # 输出:1 2