📅  最后修改于: 2023-12-03 15:06:23.430000             🧑  作者: Mango
循环链表是一种特殊的链表,其中最后一个节点指向第一个节点,形成一个环状结构。本文将介绍如何在循环链表中交换第一个和最后一个节点的位置。
要交换循环链表中的第一个和最后一个节点,我们需要先找到链表中的最后一个节点,然后将其指向第二个节点,同时将第一个节点移到链表最后。
具体步骤如下:
以下是Python实现交换循环链表中第一个和最后一个节点位置的代码:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def swap_first_last(head):
# 处理链表为空或只有一个节点的情况
if not head or not head.next:
return head
# 找到链表的最后一个节点和倒数第二个节点
last_node = head
while last_node.next.next:
last_node = last_node.next
second_last_node = last_node.next
# 交换第一个和最后一个节点,并将链表最后节点指向第二个节点
second_last_node.next = head.next
last_node.next = head
head.next = second_last_node
# 返回新的头节点
return second_last_node
假设原始循环链表为 1 -> 2 -> 3 -> 4 -> 1
,则交换后的循环链表应为 4 -> 2 -> 3 -> 1 -> 4
。下面是一个完整的测试示例:
head = ListNode(1)
head.next = ListNode(2)
head.next.next = ListNode(3)
head.next.next.next = ListNode(4)
head.next.next.next.next = head
new_head = swap_first_last(head)
# 打印新的循环链表
result = []
curr = new_head
while curr:
result.append(curr.val)
curr = curr.next
print(result) # 输出 [4, 2, 3, 1]