java单链表就地逆置
时间: 2023-10-14 18:17:33 浏览: 95
以下是Java实现单链表就地逆置的代码:
```
public class ListNode {
int val;
ListNode next;
public ListNode(int val) {
this.val = val;
this.next = null;
}
}
public class Solution {
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode prev = null;
ListNode curr = head;
while (curr != null) {
ListNode temp = curr.next;
curr.next = prev;
prev = curr;
curr = temp;
}
return prev;
}
}
```
主要思路是从头开始遍历链表,每次将当前节点的next指向前面的节点,然后将prev指向当前节点,当前节点指向下一个节点,继续遍历下去,直到遍历完整个链表。最后返回prev即为逆置后的链表头。
相关问题
用java单链表就地逆置程序
在Java中,可以使用迭代的方式就地逆置一个单链表,即不需要额外的数据结构,只通过改变节点的指针指向来完成链表的反转。以下是简单的步骤:
```java
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode prev = null;
ListNode curr = head;
while (curr != null) {
// 将当前节点的next指向前一个节点
ListNode temp = curr.next;
curr.next = prev;
// 移动prev和curr到下一个节点
prev = curr;
curr = temp;
}
// 返回新的头节点,即原链表的尾部
return prev;
}
```
在这个函数里,我们创建了两个指针`prev`和`curr`,初始时`prev`为`null`,`curr`为`head`。然后在循环中,每次都将`curr`的`next`指向前一个节点`prev`,然后将`prev`和`curr`都向后移动一步,直到`curr`变为`null`。最后返回`prev`作为新的头节点。
java单链表就地逆置的主方法程序
Java单链表就地逆置的主方法通常会涉及到两个指针,一个指向当前节点,另一个指向下一个节点。逆置的过程就是交换这两个指针所指的节点,然后将当前节点的next指向前一个节点,直到遍历到链表的末尾。以下是简单的步骤和伪代码描述:
```java
public class ListNode {
int val;
ListNode next;
// 其他构造函数和getter/setter...
}
public void reverseList(ListNode head) {
if (head == null || head.next == null) {
return; // 如果链表为空或只有一个元素,无需反转
}
ListNode prev = null, curr = head;
while (curr != null) {
// 保存当前节点的下一个节点
ListNode nextTemp = curr.next;
// 将当前节点的next指向前一个节点
curr.next = prev;
// 更新前驱和当前节点
prev = curr;
curr = nextTemp;
}
// 返回新的头节点
head = prev;
}
```
在这个`reverseList`方法中,主方法就是`prev`和`curr`这俩指针的循环过程。最后,返回的是经过逆置后的链表的新头部。
阅读全文