引言双向链表是数据结构中的一种重要类型,它在很多编程面试题中都有所涉及。掌握双向链表的实现技巧对于面试来说至关重要。本文将详细介绍Python中双向链表的实现方法,并涵盖其基本操作,帮助读者在面试中游...
双向链表是数据结构中的一种重要类型,它在很多编程面试题中都有所涉及。掌握双向链表的实现技巧对于面试来说至关重要。本文将详细介绍Python中双向链表的实现方法,并涵盖其基本操作,帮助读者在面试中游刃有余。
双向链表是一种链式存储结构,它的每个节点包含数据域和两个指针域,分别指向前一个节点和后一个节点。与单向链表相比,双向链表允许我们在任意位置进行高效的插入和删除操作。
首先,我们需要定义一个节点类Node,它包含三个属性:item(存储数据)、prev(指向前一个节点)和next(指向后一个节点)。
class Node: def __init__(self, item): self.item = item self.prev = None self.next = None接下来,我们定义一个双向链表类DoublyLinkedList,它包含五个属性:head(指向头节点)、tail(指向尾节点)、length(链表长度)、head_prev(头节点的前驱节点,用于实现循环)和tail_next(尾节点的后继节点,用于实现循环)。
class DoublyLinkedList: def __init__(self): self.head = Node(None) # 头节点 self.tail = Node(None) # 尾节点 self.head.prev = self.tail # 头节点前驱指向尾节点 self.tail.next = self.head # 尾节点后继指向头节点 self.length = 0def is_empty(self): return self.length == 0def get_length(self): return self.lengthdef travel(self): current = self.head.next while current != self.head: print(current.item) current = current.nextdef insert_head(self, item): new_node = Node(item) new_node.next = self.head.next new_node.prev = self.head self.head.next.prev = new_node self.head.next = new_node self.length += 1def append(self, item): new_node = Node(item) new_node.next = self.tail.next new_node.prev = self.tail self.tail.next.prev = new_node self.tail.next = new_node self.length += 1def insert(self, pos, item): if pos < 0 or pos > self.length: raise IndexError("Index out of bounds") if pos == 0: self.insert_head(item) elif pos == self.length: self.append(item) else: new_node = Node(item) current = self.head.next for _ in range(pos - 1): current = current.next new_node.next = current.next new_node.prev = current current.next.prev = new_node current.next = new_node self.length += 1def remove(self, item): current = self.head.next while current != self.head: if current.item == item: current.prev.next = current.next current.next.prev = current.prev self.length -= 1 return current = current.next raise ValueError("Item not found")def clear(self): self.head.next = self.head self.tail.next = self.head self.length = 0本文详细介绍了Python中双向链表的实现技巧,包括节点类和双向链表类的定义以及基本操作。通过学习和掌握这些内容,读者可以在面试中更好地应对与双向链表相关的问题。希望本文能对您的面试有所帮助。