利用单向链表 进行递归的实践
更多干货见博主个人网站:https://blog.zhenglin.work
原理阐述
首先阐述一下什么叫递归呢,就是方法不断的自身调用,直至不满足条件,跳出这个递归循环;举个栗子:从前有座山,山里有座庙,庙里有个小和尚、小和尚让老和尚给他讲故事,然后老和尚开始讲故事:“从前有座山,山里有座庙,庙里有个小和尚、小和尚让老和尚给他讲故事,然后老和尚开始讲故事……” 这就是个递归,而且这是个死循环递归。
那正常的递归是什么样的呢,还是这个故事,稍作改动一下就可以了:从前有座山,山里有座庙,庙里有个5岁的小和尚、小和尚让老和尚给他讲故事,然后老和尚开始讲故事:“从前有座山,山里有座庙,庙里有个4岁的小和尚、小和尚让老和尚给他讲故事,然后老和尚开始讲故事……” 这个直至小和尚到1岁(因为0岁的小和尚还未出生),结束递归。
牛刀小试
public class Hannio {
private void hanTest(int n,char from,char mid,char to) {
if(n<1) {
System.out.println("输入有误");
}else if(n==1) {
System.out.println("把第1个箱子从"+from+"移到"+to);
}else {
//把n-1个箱子 移动到mid上,to作为过渡
hanTest(n-1, from, to, mid);
//把第n个箱子移动到to上
System.out.println("把第"+n+"个箱子从"+from+"移动到"+to);
//把n-1个箱子从mid 移动到to上,from作为过渡;
hanTest(n-1, mid, from, to);
}
}
- 上面代码是简单实现一个汉诺塔程序,汉诺塔可以看作是一个比较典型的递归现象;
首先总结规律,不管多少个箱子移动,只有两种情况:第一种 只有一个箱子,从第一根柱子直接移动到第三根柱子上。 第二种 有两个箱子,先把第一个箱子移动到中间的柱子,第二个箱子移动到第三根柱子上,最后第一个箱子移动到第三根柱子上,完成任务。 那如果有很多箱子呢,比如有n个箱子呢,这个可以把n-1个箱子看成第一个箱子,n是第二个箱子;这样就很好移动了;先用递归方法让n-1个箱子移动到第二根柱子上,然后第n个箱子移动到第三根柱子上。最后再用递归实现剩下的n-1个箱子从第二根柱子上移动到第三根柱子上。
通过上面例子,基本理解了递归的本质了,接下来用递归实现单向链表,实现增、删、查、显示功能。
单向链表的实现
package</