Java实现单链表反转
时间: 2023-03-29 14:03:17 浏览: 130
可以使用迭代或递归的方式实现单链表反转。以下是迭代方式的代码示例:
```java
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode curr = head;
while (curr != null) {
ListNode next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
return prev;
}
```
其中,ListNode 是单链表节点的定义,包含一个 val 属性和一个 next 属性,表示节点的值和下一个节点的指针。
相关问题
如何用java实现单链表逆转
在Java中,可以使用迭代的方式来实现单链表的逆转,下面是一个简单的示例:
```java
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public class Solution {
public ListNode reverseList(ListNode head) {
// 初始化两个指针,prev为null,current为head
ListNode prev = null, current = head;
// 当current不为null时,循环遍历并反转链表
while (current != null) {
// 记录当前节点的下一个节点
ListNode nextTemp = current.next;
// 更新当前节点的next指向prev
current.next = prev;
// 移动prev和current指针
prev = current;
current = nextTemp;
}
// 返回新头节点,即原链表的尾部
return prev;
}
}
```
在这个例子中,我们通过修改节点的`next`指针,实现了链表节点顺序的反转。首先将`current.next`指向`prev`,然后将`prev`和`current`向前移动一位,直到`current`变为`null`。
单链表反转java头插法
单链表反转是指将链表中的节点顺序颠倒,即原来的头节点变为尾节点,原来的尾节点变为头节点。其中,头插法是一种常用的反转单链表的方法。
在Java中,可以通过以下代码实现单链表的反转(使用头插法):
```java
class ListNode {
int val;
ListNode next;
ListNode(int val) {
this.val = val;
}
}
public class LinkedListReverse {
public static ListNode reverse(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode newHead = null;
while (head != null) {
ListNode next = head.next;
head.next = newHead;
newHead = head;
head = next;
}
return newHead;
}
public static void main(String[] args) {
// 创建一个示例链表:1 -> 2 -> 3 -> 4 -> 5
ListNode head = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);
ListNode node4 = new ListNode(4);
ListNode node5 = new ListNode(5);
head.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
// 反转链表
ListNode reversedHead = reverse(head);
// 输出反转后的链表:5 -> 4 -> 3 -> 2 -> 1
while (reversedHead != null) {
System.out.print(reversedHead.val + " ");
reversedHead = reversedHead.next;
}
}
}
```
以上代码中,`reverse`方法使用了头插法来反转单链表。首先判断链表是否为空或只有一个节点,若是,则直接返回原链表。然后,通过循环遍历链表,每次将当前节点的`next`指针指向已反转部分的头节点,并更新新的头节点为当前节点。最后返回新的头节点即可。
阅读全文