剑指offer02 JZ24 反转链表
反转链表
https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca?tpId=13&tqId=23286&ru=%2Fpractice%2Fd0267f7f55b3412ba93bd35cfa8e8035&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D1%26tpId%3D13%26type%3D13
解法1 递归法
- 定义pre 指针和cur指针,pre指向head节点的前一个节点,cur指向head节点
- 当cur为空时就是递归的出口
- 用临时节点temp 保存 cur后面的节点
- 用cur.next指向pre实现一次局部反转,
- 更新cur 与pre的位置,同时向后一位,
- pre更新为cur, cur更新为temp
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
return reverse(null,head);
}
public ListNode reverse(ListNode pre,ListNode cur){
if(cur==null){
return pre; //链表遍历完成返回头结点
}
ListNode temp=cur.next;//保存当前节点的next指向
//局部反转 --> 谁在等号右边就是指向谁
cur.next=pre;
// 更新节点局部反转完成 同时向右移动一位
pre=cur;
return reverse(pre,temp);
}
}