首页 > 其他 > 详细

剑指 Offer 24. 反转链表

时间:2020-11-08 16:57:23      阅读:21      评论:0      收藏:0      [点我收藏+]

题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
解法一:双指针(简单)
思路:直接让后一个指向前一个

解法二:递归
思路:将链表看作已经反转和还未反转两个部分
代码:
/**

  • Definition for singly-linked list.

  • public class ListNode {

  • int val;
    
  • ListNode next;
    
  • ListNode(int x) { val = x; }
    
  • }
    */
    class Solution {
    public ListNode reverseList(ListNode head) {
    if(headnull){
    return null;
    }
    return reverse(null,head);
    }
    //递归模板:终止条件,递归调用,逻辑处理
    public ListNode reverse(ListNode p,ListNode q){ //p已经反转,q还未反转
    if(q
    null){
    return p;
    }
    ListNode ret = reverse(q,q.next); //递归调用先于逻辑处理:递归总是要回溯的,回溯时进行逻辑处理才是正确的
    q.next = p; //逻辑处理
    return ret; //调用一次就执行一次q.next = p;完成反转

    }
    }

剑指 Offer 24. 反转链表

原文:https://www.cnblogs.com/nickyBlog/p/13943905.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!