📅  最后修改于: 2023-12-03 15:37:07.540000             🧑  作者: Mango
双向循环链表是一种常见的数据结构,它有些情况下可以方便的解决一些问题。本文介绍如何反转一个双向循环链表,代码示例使用Python语言实现。
双向循环链表是由一些节点组成的,每个节点有value
和两个指针prev
和next
,其中prev
指向前一个节点,next
指向后一个节点,最后一个节点的next
指向第一个节点,第一个节点的prev
指向最后一个节点。具体可见下图:
反转双向循环链表的思路非常简单,只需要将每个节点的prev
和next
互换即可。但需要特别注意头节点和尾节点的处理,即头节点的prev
指向原链表的尾节点,尾节点的next
指向原链表的头节点。
下面是Python实现的反转双向循环链表的代码,其中Node
为节点的定义:
class Node:
def __init__(self, value):
self.value = value
self.prev = None
self.next = None
def reverse_doubly_circular_linked_list(head):
if not head:
return None
cur = head
while cur:
cur.prev, cur.next = cur.next, cur.prev
cur = cur.prev # 光标向前移动
head.prev, head.next = head.next, head.prev # 处理头节点和尾节点
return head.prev # 返回新的头节点
下面是对反转双向循环链表的测试,我们构造了一个长度为5的双向循环链表:
if __name__ == '__main__':
node1 = Node(1)
node2 = Node(2)
node3 = Node(3)
node4 = Node(4)
node5 = Node(5)
node1.prev = node5
node1.next = node2
node2.prev = node1
node2.next = node3
node3.prev = node2
node3.next = node4
node4.prev = node3
node4.next = node5
node5.prev = node4
node5.next = node1
new_head = reverse_doubly_circular_linked_list(node1)
# 验证链表是否反转成功
cur = new_head
while cur:
print(cur.value)
cur = cur.next
输出结果如下,可见链表已经成功反转:
5
4
3
2
1