利用迭代实现链表反转Java
时间: 2023-02-09 15:45:15 浏览: 121
用迭代实现链表反转的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
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`,表示链表已经成功反转。
单向链表反转java
单向链表反转是指将一个单链表从头到尾的节点顺序改变,使得原来的下一个节点变成当前节点的前一个节点。在Java中,我们可以使用迭代或递归的方式来实现这个操作。
**迭代法:**
```java
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode curr = head;
while (curr != null) {
ListNode temp = curr.next; // 保存当前节点的下一个节点
curr.next = prev; // 将当前节点指向prev
prev = curr; // 更新prev为当前节点
curr = temp; // 移动到下一个节点
}
return prev; // 返回新的头节点,即原尾部节点
}
```
**递归法:**
```java
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode newHead = reverseList(head.next); // 递归反转剩余部分
head.next.next = head; // 将当前节点的next指向前一个节点
head.next = null; // 更新当前节点的next为null
return newHead; // 返回新头节点
}
```
阅读全文