利用迭代实现链表反转Java
时间: 2023-02-09 10:45:15 浏览: 141
用迭代实现链表反转的Java代码示例如下:
```Java
public class LinkedListReverser {
public static Node reverse(Node head) {
Node prev = null;
Node curr = head;
while (curr != null) {
Node nextTemp = curr.next;
curr.next = prev;
prev = curr;
curr = nextTemp;
}
return prev;
}
}
```
其中,Node类表示链表中的每个节点,包含一个值域和一个next指针。在上面的代码中,我们使用三个指针prev、curr和nextTemp,分别指向前一个节点、当前节点和下一个节点。我们在循环中更新这三个指针的值,并在每次迭代中将当前节点的next指针指向前一个节点,从而实现链表的反转。
相关问题
链表反转java
### Java实现链表反转的代码示例
在Java中实现链表反转,可以通过多种方法完成,包括迭代法、递归法等。以下是具体的实现方式及代码示例。
#### 方法一:迭代法
迭代法是一种常见的链表反转方法,通过遍历链表并逐步改变节点的指向来实现反转。以下是一个完整的迭代法实现:
```java
class Node {
int data;
Node next;
Node(int data) {
this.data = data;
this.next = null;
}
}
class LinkedList {
Node head;
// 反转链表的方法
public void reverseList() {
Node prev = null;
Node current = head;
Node next = null;
while (current != null) {
next = current.next; // 暂存下一个节点
current.next = prev; // 改变当前节点的指向
prev = current; // 移动prev到当前节点
current = next; // 移动current到下一个节点
}
head = prev; // 更新头节点为新的头节点
}
// 打印链表
public void printList() {
Node temp = head;
while (temp != null) {
System.out.print(temp.data + " ");
temp = temp.next;
}
System.out.println();
}
}
public class TestNode {
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.head = new Node(1);
list.head.next = new Node(2);
list.head.next.next = new Node(3);
System.out.println("原链表:");
list.printList();
list.reverseList(); // 调用反转方法
System.out.println("反转后的链表:");
list.printList();
}
}
```
此代码展示了如何通过迭代法反转一个单向链表[^2]。
#### 方法二:递归法
递归法是另一种实现链表反转的方式,其核心思想是将问题分解为更小的子问题,并通过递归调用来解决这些子问题。以下是递归法的实现:
```java
class Node {
int data;
Node next;
Node(int data) {
this.data = data;
this.next = null;
}
}
class LinkedList {
Node head;
// 递归反转链表的方法
public Node reverseList(Node current) {
if (current == null || current.next == null) {
return current; // 当前节点为空或到达尾节点时返回
}
Node reversedHead = reverseList(current.next); // 递归处理后续节点
current.next.next = current; // 将当前节点挂到后继节点之后
current.next = null; // 清空当前节点的next指针
return reversedHead; // 返回新的头节点
}
// 打印链表
public void printList() {
Node temp = head;
while (temp != null) {
System.out.print(temp.data + " ");
temp = temp.next;
}
System.out.println();
}
}
public class TestNode {
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.head = new Node(1);
list.head.next = new Node(2);
list.head.next.next = new Node(3);
System.out.println("原链表:");
list.printList();
list.head = list.reverseList(list.head); // 调用递归反转方法
System.out.println("反转后的链表:");
list.printList();
}
}
```
此代码展示了如何通过递归法反转一个单向链表[^3]。
### 注意事项
在实现链表反转时,需要注意边界条件的处理,例如链表为空或链表只有一个节点的情况。此外,在递归法中,还需要确保递归调用不会导致栈溢出。
java 实现链表反转
要实现链表的反转,可以使用迭代或递归的方法。下面是使用迭代方法实现链表反转的 Java 代码示例:
```java
public class ListNode {
int val;
ListNode next;
ListNode(int val) {
this.val = val;
}
}
public class LinkedListReverse {
public ListNode reverse(ListNode head) {
ListNode prev = null;
ListNode current = head;
ListNode next = null;
while (current != null) {
next = current.next;
current.next = prev;
prev = current;
current = next;
}
return prev;
}
}
```
使用示例:
```java
public static void main(String[] args) {
LinkedListReverse reverser = new LinkedListReverse();
// 创建链表 1 -> 2 -> 3 -> 4 -> 5
ListNode head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head.next.next.next = new ListNode(4);
head.next.next.next.next = new ListNode(5);
// 反转链表
head = reverser.reverse(head);
// 打印反转后的链表
while (head != null) {
System.out.print(head.val + " ");
head = head.next;
}
}
```
以上代码会输出:`5 4 3 2 1`,表示链表已经成功反转。
阅读全文
相关推荐













