206反转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2:
输入:head = [1,2] 输出:[2,1] 示例 3:
输入:head = [] 输出:[]
提示:
链表中节点的数目范围是 [0, 5000]
-5000 <= Node.val <= 5000进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?
看答案没看懂,找了gpt演示过程,一目了然,不得不感慨还没就业已经失业
class Solution {
public ListNode reverseList(ListNode head) {
ListNode cur = head, pre = null;
while(cur != null) {
ListNode tmp = cur.next; // 暂存后继节点 cur.next
cur.next = pre; // 修改 next 引用指向
pre = cur; // pre 暂存 cur
cur = tmp; // cur 访问下一节点
}
return pre;
}
}
假设给定的单链表为:
head = 1 -> 2 -> 3 -> 4 -> null
初始状态:
prev = null cur = 1 -> 2 -> 3 -> 4 -> null temp = null第一次迭代:
temp = cur.next // temp = 2 -> 3 -> 4 -> null
cur.next = prev // 1 -> null
prev = cur // prev = 1 -> null
cur = temp // cur = 2 -> 3 -> 4 -> null状态:
prev = 1 -> null
cur = 2 -> 3 -> 4 -> null
temp = null
第二次迭代:
temp = cur.next // temp = 3 -> 4 -> null
cur.next = prev // 2 -> 1 ->null
prev = cur // prev = 2 -> 1 -> null
cur = temp // cur = 3 -> 4 -> null
状态:
prev = 2 -> 1 -> null
cur = 3 -> 4 -> null
temp = null
第三次迭代:
temp = cur.next // temp = 4 -> null
cur.next = prev // 3 -> 2 -> 1 ->
null prev = cur // prev = 3 -> 2 -> 1 -> null
cur = temp // cur = 4 ->null
状态:
prev = 3 -> 2 -> 1 -> null
cur = 4 -> null temp = null
第四次迭代:
temp = cur.next // temp = null
cur.next = prev // 4 -> 3 -> 2 -> 1 ->null
prev = cur // prev = 4 -> 3 -> 2 -> 1 -> null
cur = temp // cur =null
状态:
prev = 4 -> 3 -> 2 -> 1 -> null cur = null temp = null
循环结束,返回 prev
作为反转后的链表头节点。因此,经过 reverseList 函数的执行,原始链表 1 -> 2 -> 3 -> 4 -> null 被反转为 4 -> 3 -> 2
-> 1 -> null。