链表

简介: 链表

链表(Linked List)是一种常见的数据结构,它允许在不需要预先分配固定大小内存的情况下,动态地添加和删除元素。链表中的元素被称为节点(Node),每个节点包含两个部分:数据部分和指向下一个节点的指针部分。这种结构使得链表在数据插入、删除等操作上具有较高的灵活性。下面我们将详细讨论链表的概念、类型、基本操作以及相关的代码实现。

一、链表的概念

链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表的第一个节点被称为头节点(Head Node),最后一个节点通常指向一个空值(NULL 或 None),表示链表的结束。链表中的节点可以是单个数据的简单结构,也可以是包含多个数据字段的复杂结构。

二、链表的类型

1.单向链表(Single Linked List):每个节点只包含一个指向下一个节点的指针。单向链表只能从头节点开始遍历整个链表。

2.双向链表(Double Linked List):每个节点包含两个指针,一个指向下一个节点,另一个指向前一个节点。双向链表可以从头节点或尾节点开始遍历整个链表。

3.循环链表(Circular Linked List):在单向链表或双向链表的基础上,将最后一个节点的指针指向头节点,形成一个环形的链表结构。循环链表可以方便地找到链表的最后一个节点和从头节点开始遍历整个链表。

三、链表的基本操作

1.插入节点(Insert Node):在链表的指定位置插入一个新的节点。在单向链表中,需要遍历到指定位置的前一个节点,然后修改该节点的指针指向新节点,并将新节点的指针指向原位置的节点。在双向链表中,还需要更新新节点的前一个节点和后一个节点的指针。

2.删除节点(Delete Node):删除链表中的指定节点。在单向链表中,需要遍历到该节点的前一个节点,然后修改该节点的指针指向要删除节点的下一个节点。在双向链表中,还需要更新要删除节点的前一个节点和后一个节点的指针。

3.查找节点(Search Node):根据节点的数据或位置查找链表中的指定节点。在链表中查找节点通常需要从头节点开始遍历整个链表,直到找到目标节点或遍历到链表末尾。

4.遍历链表(Traverse List):从头节点开始依次访问链表中的每个节点,直到遍历到链表末尾。遍历链表通常用于打印链表元素、计算链表长度等操作。

四、链表的代码实现(以Python为例)

下面是一个简单的单向链表的Python实现:

python复制代码

  class Node: 
  def __init__(self, data=None): 
  self.data = data 
  self.next = None 
  
  class LinkedList: 
  def __init__(self): 
  self.head = None 
  
  # 插入节点到链表末尾 
  def insert(self, data): 
  if not self.head: 
  self.head = Node(data) 
  else: 
  current = self.head 
  while current.next: 
  current = current.next 
  current.next = Node(data) 
  
  # 从链表中删除指定数据的节点 
  def delete(self, data): 
  if self.head is None: 
  return 
  
  # 如果头节点就是要删除的节点 
  if self.head.data == data: 
  self.head = self.head.next 
  return 
  
  current = self.head 
  while current.next: 
  if current.next.data == data: 
  current.next = current.next.next 
  return 
  current = current.next 
  
  # 查找链表中是否存在指定数据的节点 
  def search(self, data): 
  current = self.head 
  while current: 
  if current.data == data: 
  return True 
  current = current.next 
  return False 
  
  # 遍历链表并打印节点数据 
  def display(self): 
  elements = [] 
  current_node = self.head 
  while current_node: 
  elements.append(current_node.data) 
  current_node = current_node.next 
  print(elements) 
  
  # 使用示例 
  linked_list = LinkedList() 
  linked_list.insert(1) 
  linked_list.insert(2) 
  linked_list.insert(3) 
  linked_list.display() # 输出: [1, 2, 3] 
  linked_list.delete(2) 
  linked_list.display() # 输出: [1, 3] 
  print(linked_list.search(3)) # 输出: True 
  print(linked_list.search(

 

相关文章
|
4月前
|
存储 Python
什么是链表
什么是链表
43 0
|
4月前
|
存储 Java
链表的认识
链表的认识
|
4月前
链表之有头链表
链表之有头链表
|
4月前
|
存储 缓存 C语言
链表修炼指南
链表修炼指南
|
10月前
|
存储
07 链表
07 链表
29 0
|
存储 C++
链表相关问题的实现
链表相关问题的实现
|
存储 索引
关于链表我所知道的
关于链表我所知道的
68 0
|
存储 算法 Java
【JavaOj】链表十连问
【JavaOj】链表十连问
96 0
|
算法
链表必知必会
链表必知必会
67 0
链表必知必会