📅  最后修改于: 2023-12-03 15:26:37.228000             🧑  作者: Mango
双向链表(Doubly linked list)是一种数据结构,其中每个节点除了保存一个指向下一个节点的指针,还保存一个指向上一个节点的指针。查找双向链表的大小(即节点数量)是常见的操作之一。
下面是一个样例的双向链表的定义:
class Node:
def __init__(self, data):
self.data = data
self.next = None
self.prev = None
class DoublyLinkedList:
def __init__(self):
self.head = None
这里我们定义了一个 Node
类和一个 DoublyLinkedList
类。Node
类表示双向链表节点,保存了节点的数据和前后指针;DoublyLinkedList
类表示整个双向链表,保存了链表头节点的指针。
最简单的方法是遍历整个双向链表,记录节点个数。代码如下:
class DoublyLinkedList:
...
def size(self):
count = 0
cur = self.head
while cur:
count += 1
cur = cur.next
return count
这个方法的时间复杂度为 O(n),n 表示链表长度。
另一种方法是保存双向链表的尾节点指针,这样就可以直接得到节点个数。代码如下:
class DoublyLinkedList:
...
def size(self):
count = 0
cur = self.head
tail = None
while cur:
count += 1
tail = cur
cur = cur.next
return count if tail else 0
这个方法的时间复杂度也为 O(n),但是实际运行效率更高,因为无需遍历整个链表。
以上介绍了两种方法来查找双向链表的大小。方法一简单易实现,但是时间复杂度较高;方法二则需要额外的指针空间,但是运行效率更高。根据具体的场景选择最合适的方法。