日期:2014-05-20  浏览次数:20708 次

用递归返回链表尾节点的方法
一个单向链表
要求编写一个方法,通过导入链表中任意一个节点,就能返回这个链表的尾节点
以下是我的方法:
 Node getEnd(Node n){
if(n.getNext()!=null)
{getEnd(n.getNext());}
return n;
}

(Node是我定义的节点类,getNext方法是一个返回某节点的后继节点的方法,返回类型也是Node,具体就不写了)


以上方法是不能编译通过的,因为如果后继存在,那么大括号里的语句不能提供返回值,而方法定义要求返回一个Node类型数据。
而如果为了编译通过而在大括号里添加语句返回某一个Node,那么此方法在递归调用找到链表尾巴前会不断返回好多无用的Node,造成显示结果混乱。

怎样做才能编译通过,而且只返回一个最后节点?
不懂内在的程序流程,抓瞎乱改,加else也不行,有什么办法么。



------解决方案--------------------
可以用循环吧……不是要得到链表的最后一个节点吗?
Node getEnd(Node n){
Node p=n;
while(p.Next()!=null)//若p的下一个节点不为空
{p=p.Next();}//p等于它的下一个节点
return p;
}

不知道我理解的是否对不……仅供参考……呵呵……