• 力扣leetcode206题,反转链表递归方式Java代码细节分析。


    细节分析往往是算法代码编写的关键,反转链表的关键是如下两行代码:

    head.next.next=head;
    //head=null; //这步一定要注意,不然末尾少了一个指向null的连接。
    head.next=null;//如果没有这一步,新链表的最后一个节点会出现环
    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode() {}
     *     ListNode(int val) { this.val = val; }
     *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
     * }
    
     */
    
    
    ///使用递归的方式
    class Solution {
        public ListNode reverseList(ListNode head) {
            //设置递归的出口
            if(head==null||head.next==null){
                return head;
            }
            ListNode next= reverseList(head.next);
            head.next.next=head;
            //head=null; //这步一定要注意,不然末尾少了一个指向null的连接。
            head.next=null;//如果没有这一步,新链表的最后一个节点会出现环。
            return next;
        }
    }

    递归每层的变化图如下:

  • 相关阅读:
    如何使用API创建OpenStack虚拟机?
    Windows Server 2012 新特性:IPAM的配置
    DNSSec
    Win Server 8中的利器:微软在线备份服务
    AD RMS总结
    开发中辅助功能
    开发中坑爹的地方
    Js 中常用方法
    asp.net 错误处理
    js中的注意事项(持续整理)
  • 原文地址:https://www.cnblogs.com/mkl34367803/p/14657299.html
Copyright © 2020-2023  润新知