先解决一个问题:
链表的头节点表示的是第一个节点吗?
链表的第一个节点是头节点,它一般不存放数据,只是使用该节点的指针成员,也就是说头指针是链表中的头节点也就是第一个节点的地址。
头节点后面的第一个节点是第一个有效节点,存放数据是从有效节点开始的。有效节点的专业术语叫首节点。
主方法:讲一下这个代码:
System.out.println(singleLinkedList.GetLength(singleLinkedList.gethead()));
一个输出使用了两个函数。
查看gethead函数:就是一个简单的返回头节点
class SingleLinkedList {
// 先初始化一个头结点,头节点不要动,且不存放具体数据
private HeroNode head = new HeroNode(0, "", "");
public HeroNode gethead() {
return head;
}
理解这里:很重要
查看GetLength函数:这个函数传入的值是头节点传入的是头节点!!!!!
/*
* 返回链表的节点有效个数
*
*/
public static int GetLength(HeroNode head) {//传入的值是头节点
if(head.next == null) {
return 0;//空链表
}
HeroNode temp = head.next;
int length = 0;
while(true) {
if(temp != null) {
length++;
}
else {
break;
}
temp = temp.next;
}
return length;
}
public class SingleLinkedListDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 进行测试
// 先创建节点
HeroNode hero1 = new HeroNode(1, "宋江", "及时雨");
HeroNode hero2 = new HeroNode(2, "卢俊义", "玉麒麟");
HeroNode hero3 = new HeroNode(3, "吴用", "智多星");
HeroNode hero4 = new HeroNode(4, "林冲", "豹子头");
// 创建链表
SingleLinkedList singleLinkedList = new SingleLinkedList();
// 按编号加入
singleLinkedList.addByOrder(hero4);
singleLinkedList.addByOrder(hero3);
singleLinkedList.addByOrder(hero2);
singleLinkedList.addByOrder(hero1);
System.out.println(singleLinkedList.GetLength(singleLinkedList.gethead()));
}
}