链表反转
题目链接
https://leetcode.cn/problems/reverse-linked-list/
思路分析

用两个指针,实现对指针指向的反转,同时依次向后移动
代码实现
双指针法
java
class Solution {
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;
}
}递归法
java
// 递归
class Solution {
public ListNode reverseList(ListNode head) {
return reverse(null, head);
}
private ListNode reverse(ListNode prev, ListNode cur) {
if (cur == null) {
return prev;
}
ListNode temp = null;
temp = cur.next;// 先保存下一个节点
cur.next = prev;// 反转
// 更新prev、cur位置
// prev = cur;
// cur = temp;
return reverse(cur, temp);
}
}延申:反转双链表
思路和反转单链表一样,只是多了一个指针,再处理一下就可以了
java
class Solution {
public DoubleListNode reverseDoubleList(DoubleListNode head) {
DoubleListNode pre = null;
DoubleListNode cur = head;
while (cur != null) {
DoubleListNode next = cur.next;
cur.next = pre;
cur.last = next;
pre = cur;
cur = next;
}
return pre;
}
}
// 双链表节点
class DoubleListNode {
public int value;
public DoubleListNode last;
public DoubleListNode next;
public DoubleListNode(int v) {
value = v;
}
}