📜  查找双向链表大小的程序(1)

📅  最后修改于: 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),但是实际运行效率更高,因为无需遍历整个链表。

总结

以上介绍了两种方法来查找双向链表的大小。方法一简单易实现,但是时间复杂度较高;方法二则需要额外的指针空间,但是运行效率更高。根据具体的场景选择最合适的方法。