Reverse a Doubly Linked List by Swapping Data in Java

2025年5月5日 | 阅读 3 分钟

给定一个双向链表,在不使用任何额外空间的情况下,要求就地反转该链表。

示例 1

输入

节点:1, 2, 3

输出

原始双向链表为 1 -> 2 -> 3

反转后的双向链表为 3 -> 2 -> 1

解释

第一次交换:1 ↔ 3

由于中间的节点 2 保持不变,反转后的链表为 3 -> 2 -> 1。

示例 2

输入

节点:100

输出

原始双向链表为 100

反转后的双向链表为 100

解释

只有一个节点的链表反转后保持不变。

示例 3

输入

节点:15, 25, 5

输出

原始双向链表为 15 -> 25 -> 5

反转后的双向链表为 5 -> 25 -> 15

解释

第一次交换:15 ↔ 5

由于中间的节点 25 保持不变,反转后的链表为 5 -> 25 -> 15。

注意:空链表反转后保持不变。

双向链表允许我们向前和向后遍历,因为它同时具有前一个指针和后一个指针。因此,通过在链表开头放置一个指针(我们称之为左指针),在结尾放置一个右指针,我们可以将这两个指针向中间移动,将左指针向前移动,将右指针向后移动。

双向链表由代码定义,其中 prev_node 和 next_node 指针分别用于前向和后向遍历,每个节点包含整数数据。newNode() 方法使用空指针和提供的数据生成节点。insert() 方法通过更新新节点和现有头节点的指针来将一个节点添加到链表头部。reverseList() 函数通过在链表开头和结尾处对称位置的节点之间交换数据来反转链表,直到指针相遇或交叉。

实施

文件名: DoublyLinkedList.java

输出

 
The list before reversing is: 
1 <--> 2 <--> 3 <--> 4 <--> 5
The List After Reversing is :
5 <--> 4 <--> 3 <--> 2 <--> 1   

下一主题Buzz Number Java