[数据结构]链表(介绍2)

66 阅读2分钟

链表数据结构详解

链表是一种线性数据结构,它通过节点之间的指针链接来存储数据,与数组的连续内存空间不同。每个节点包含两部分:

  1. 数据域:存储实际数据
  2. 指针域:存储指向下一个节点的地址

链表结构示意图

[数据|指针][数据|指针][数据|指针]None
头节点(head)                    尾节点

核心特点:

  1. 动态内存分配:节点在内存中非连续存储
  2. 高效插入/删除:O(1)时间复杂度(已知位置时)
  3. 低效随机访问:O(n)时间复杂度(需从头遍历)
  4. 无预分配空间:大小可动态增长

Python链表实现及遍历

class ListNode:
    """链表节点类"""
    def __init__(self, data):
        self.data = data    # 数据域
        self.next = None   # 指针域(指向下一个节点)

class LinkedList:
    """链表类"""
    def __init__(self):
        self.head = None  # 链表头节点
    
    def append(self, data):
        """在链表末尾添加节点"""
        new_node = ListNode(data)
        if not self.head:  # 空链表
            self.head = new_node
            return
        
        current = self.head
        while current.next:  # 遍历到最后一个节点
            current = current.next
        current.next = new_node  # 添加新节点
    
    def print_list(self):
        """遍历打印链表"""
        current = self.head
        while current:
            print(current.data, end=" → ")
            current = current.next
        print("None")  # 表示链表结束

# 创建链表并测试
if __name__ == "__main__":
    # 构建链表:1 → 3 → 5 → 7
    ll = LinkedList()
    ll.append(1)
    ll.append(3)
    ll.append(5)
    ll.append(7)
    
    # 遍历打印
    print("链表内容:")
    ll.print_list()  # 输出:1 → 3 → 5 → 7 → None

遍历过程详解:

  1. head节点开始(当前节点 = 头节点)
  2. 循环执行:
    • 打印当前节点数据
    • 当前节点移动到next指向的节点
  3. 当遇到None时终止循环

链表类型对比

类型指针特点优势
单链表每个节点只有next指针内存效率高
双向链表有prev和next两个指针可双向遍历
循环链表尾节点指向头节点可循环访问

实际应用中:

  • 浏览器历史记录(双向链表)
  • 音乐播放列表(循环链表)
  • 内存管理(单链表)

理解链表的关键是掌握指针操作节点关系,这种结构为动态数据管理提供了高效解决方案。