数据结构与算法之链表 链表中等边界 双链表操作

数据结构与算法阿木 发布于 2025-07-11 10 次阅读


摘要:链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。双链表是链表的一种,它允许节点向前和向后两个方向移动。本文将围绕双链表中等边界操作展开,详细介绍双链表的基本概念、实现方法以及中等边界操作的具体实现。

一、双链表的基本概念

1. 节点结构

双链表的节点结构包含三个部分:数据域、前驱指针和后继指针。其中,数据域存储节点数据,前驱指针指向当前节点的前一个节点,后继指针指向当前节点的后一个节点。

python

class Node:


def __init__(self, data):


self.data = data


self.prev = None


self.next = None


2. 双链表结构

双链表由头节点和尾节点组成,头节点的前驱指针指向None,尾节点的后继指针指向None。

python

class DoublyLinkedList:


def __init__(self):


self.head = None


self.tail = None


二、双链表的基本操作

1. 创建双链表

python

def create_doubly_linked_list(data_list):


dll = DoublyLinkedList()


for data in data_list:


dll.append(data)


return dll


2. 插入节点

python

def insert_node(dll, data, position):


new_node = Node(data)


if position == 0:


new_node.next = dll.head


if dll.head:


dll.head.prev = new_node


dll.head = new_node


if dll.tail is None:


dll.tail = new_node


else:


current_node = dll.head


for _ in range(position - 1):


if current_node is None:


raise IndexError("Position out of range")


current_node = current_node.next


new_node.next = current_node.next


new_node.prev = current_node


if current_node.next:


current_node.next.prev = new_node


current_node.next = new_node


if new_node.next is None:


dll.tail = new_node


return dll


3. 删除节点

python

def delete_node(dll, position):


if dll.head is None:


raise IndexError("List is empty")


if position == 0:


dll.head = dll.head.next


if dll.head:


dll.head.prev = None


else:


dll.tail = None


else:


current_node = dll.head


for _ in range(position):


if current_node is None:


raise IndexError("Position out of range")


current_node = current_node.next


if current_node.next:


current_node.next.prev = current_node.prev


if current_node.prev:


current_node.prev.next = current_node.next


if current_node == dll.tail:


dll.tail = current_node.prev


return dll


4. 查找节点

python

def find_node(dll, data):


current_node = dll.head


while current_node:


if current_node.data == data:


return current_node


current_node = current_node.next


return None


5. 遍历双链表

python

def traverse_doubly_linked_list(dll):


current_node = dll.head


while current_node:


print(current_node.data)


current_node = current_node.next


三、双链表中等边界操作

1. 获取中间节点

python

def get_middle_node(dll):


if dll.head is None:


return None


slow = dll.head


fast = dll.head


while fast and fast.next:


slow = slow.next


fast = fast.next.next


return slow


2. 删除中间节点

python

def delete_middle_node(dll):


middle_node = get_middle_node(dll)


if middle_node is None:


return dll


if middle_node.prev:


middle_node.prev.next = middle_node.next


if middle_node.next:


middle_node.next.prev = middle_node.prev


if middle_node == dll.head:


dll.head = middle_node.next


if middle_node == dll.tail:


dll.tail = middle_node.prev


return dll


3. 获取倒数第k个节点

python

def get_kth_last_node(dll, k):


if dll.head is None:


return None


slow = dll.head


fast = dll.head


for _ in range(k):


if fast is None:


return None


fast = fast.next


while fast:


slow = slow.next


fast = fast.next


return slow


四、总结

本文详细介绍了双链表的基本概念、实现方法以及中等边界操作的具体实现。通过学习本文,读者可以掌握双链表的基本操作,并能够灵活运用中等边界操作解决实际问题。在实际应用中,双链表具有广泛的应用场景,如实现栈、队列、双向队列等数据结构。希望本文对读者有所帮助。