📌  相关文章
📜  数据结构示例-n个节点的双向链表列表并反序打印(1)

📅  最后修改于: 2023-12-03 15:40:01.755000             🧑  作者: Mango

数据结构示例- n个节点的双向链表并反序打印

双向链表是一种常见的数据结构,由多个节点组成,每个节点包括值和指向前一个节点和后一个节点的指针。双向链表相比单向链表,可以双向遍历,方便实现某些功能。

下面是一个包含n个节点的双向链表的示例,并以反序打印为例。假设我们已经定义了节点类Node,包含属性val和指向前后节点的属性prevnext,并已经创建好了双向链表head

class Node:
    def __init__(self, val=0, prev=None, next=None):
        self.val = val
        self.prev = prev
        self.next = next

head = Node(1)
node2 = Node(2, head)
head.next = node2
node3 = Node(3, node2)
node2.next = node3
node4 = Node(4, node3)
node3.next = node4
node5 = Node(5, node4)
node4.next = node5

现在我们要实现反转打印,也就是从最后一个节点开始打印,一直到第一个节点。可以通过遍历链表,将节点的值加到列表中,并将列表反序。这里我们使用一个辅助函数reverse_print来实现反转。

def reverse_print(head):
    res = []
    p = head
    while p:
        res.append(p.val)
        p = p.next
    return res[::-1]

print(reverse_print(head))  # 输出 [5, 4, 3, 2, 1]

另一种实现方式是使用递归,从最后一个节点开始递归。这里我们使用一个辅助函数reverse_print_recursion来实现递归。

def reverse_print_recursion(head):
    if not head:
        return []
    res = reverse_print_recursion(head.next)
    res.append(head.val)
    return res

print(reverse_print_recursion(head))  # 输出 [5, 4, 3, 2, 1]

以上两种方法的时间复杂度都是O(n),空间复杂度分别是O(n)和O(n)。具体实现可以根据实际情况选择。