剑指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 递归法

  1. 定义pre 指针和cur指针,pre指向head节点的前一个节点,cur指向head节点
  2. 当cur为空时就是递归的出口
  3. 用临时节点temp 保存 cur后面的节点
  4. 用cur.next指向pre实现一次局部反转,
  5. 更新cur 与pre的位置,同时向后一位,
  6. 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);
        
       
   }
}
全部评论

相关推荐

10-05 11:11
海南大学 Java
投票
理想江南137:感觉挺真诚的 感觉可以试一试
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务