力扣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; } }
递归每层的变化图如下: