每天早上七点三十分,准时推送干货
关于单链表反转,阿粉以前写过一篇文章,是用迭代法实现的,还有一种方法是使用递归来实现的,阿粉一直没敢写,因为害怕讲不清楚。但是不能因为害怕讲不清楚就不写了,对不对。
所以这篇文章来使用递归来实现一下,并且尝试将里面的细节一一剖出来,不废话。
首先,咱们要先明确,什么是递归。递归就是自己调用自己对吧。比如:有一个函数为 f(n) = f(n-1) * n
,(注意,我这里是举例子,这个函数没有给出递归的结束条件)给 n 赋值为 5 , 则:
--> f(5)
--> 5 * f(4)
--> 5 * ( 4 * f(3))
--> 5 * ( 4 * (3 * f(2)))
--> 5 * ( 4 * ( 3 * ( 2 * f (1))))
--> 5 * ( 4 * ( 3 * ( 2 * 1)))
--> 5 * ( 4 * ( 3 * 2))
--> 5 * ( 4 * 6 )
--> 5 * 24
--> 120
在看完例子之后,咱们接下来不 BB ,直接 show code:
/**
* 单链表反转---递归实现
*/
public class ReverseSingleList {
public static class Node{
private int data;
private Node next;
public Node( int data , Node next){
this.data = data;
this.next = next;
}
public int getData(){return data;}
}
public static void main(String[] args){
// 初始化单链表
Node node5 = new Node(5,null);
Node node4 = new Node(4,node5);
Node node3 = new Node(3,node4);
Node node2 = new Node(2,node3);
Node node1 = new Node(1,node2);
// 调用反转方法
Node recursiveList = recursiveList(node1);
System.out.println(recursiveList);
}
/**
*递归实现单链表反转
* @param list 为传入的单链表
*/
publ