解法一、迭代反转
先来看示意图,以链表1->2->3->4->5
为例:
在遍历链表时,每一次循环只需要做三件事,1. 把当前节点的 next 指针指向其前驱节点;2. 把前驱节点指针指向当前节点;3. 把当前节点指针指向其下一个节点。需要注意的是,我们需要一个变量来暂存当前节点的下一个节点,这里我们用 temp 表示,代码如下
public ListNode reverseList(ListNode head) {
// 前驱节点初始为null
ListNode prev = null;
// 当前节点用cur表示
ListNode cur = head;
// 用temp暂存下一个节点
ListNode temp;
while (cur != null) {
// 获取下一个节点
temp = cur.next;
// 把当前节点的 next 指针指向其前驱节点
cur.next = prev;
// 把前驱节点指针指向当前节点
prev = cur;
// 把当前节点指针指向其下一个节点
cur = temp;
}
// 注意最后返回的是prev
return prev;
}