引自免费微信小程序:皆我百晓生
当然,我很乐意帮助您解决这个问题。逆置单链表中的所有节点可以分为两种情况:递归地逆序整个链表或通过预处理得到前缀逆序列表。接下来我会分别提供两种方法的Java实现。
- 递归逆序整个链表
在递归情况下,我们可以遍历链表并交换每个节点与相邻节点的值。这里是一个简单的Java代码示例:
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public void reverseList(ListNode head) {
if (head == null || head.next == null) return;
ListNode prev = null, current = head, next = head.next;
while (current != null) {
next.val = current.val;
current = current.next;
prev = prev.next;
}
head.val = prev.val;
head.next = null;
}
- 预处理得到前缀逆序列表
另一种方法是先对链表进行排序,然后将排序后的前端作为逆序链表的第一个元素。以下是这种方法的Java实现:
import java.util.Arrays;
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public List> reverseList(ListNode head) {
if (head == null || head.next == null) return Arrays.asList();
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode sortedList = dummy.next;
while (sortedList.next != null) {
sortedList = sortedList.next;
}
List> reversedList = new ArrayList<>();
while (!sortedList.isEmpty()) {
reversedList.add(sortedList.subList(0, 1));
sortedList = sortedList.next;
}
return reversedList;
}
这两种方法都可以逆置单链表中的所有节点,您可以根据您的需求选择合适的实现。希望这可以帮助到您。
