要获取单链表结点个数,需要判断单链表是不是空链表,如果是空链表,则返回0,如果不是,遍历单链表,定义当前结点指向头指针,然后while循环,只要满足当前结点不等于null,结点长度加1。实现过程分别是循环遍历和递归
循环遍历实现过程如下所示:
package cn.edu.nwu.structs.linklist;
/**
* @author jcm
*
*时间 2016年8月23日
*/
public class GetLinkListNodeLength {
/**
* @author jcm
* 非递归求链表的长度,使用遍历方法
* @param head 头指针
* @return 返回链表的长度
*/
public static int getLinkListNodeLength(Node head){
if(head == null){
return 0;
}
int length = 0;
Node currentNode = head;
//如果链表不为空,则长度加1并且当前结点指向下一个结点
while(currentNode != null){
length++;
currentNode = currentNode.next;
}
return length;
}
//递归实现过程如下所示:
/**
* @author jcm
* 使用递归求解链表的长度
* @param head 头指针
* @return 返回链表的长度
*/
public static int getLinkListNodeLengthUseRecursion(Node head){
//递归的出口,如果是空链表,则返回0
if(head == null){
return 0;
}
return 1 + getLinkListNodeLengthUseRecursion(head.next);
}
}