链表介绍
如下图,头结点指向地址为150,对应data域的值为a1,next域指向地址为110,,,,,
单链表实现
1,先定义一个HeroNode类,每一个HeroNode对象就是一个结点
类的属性有编号,姓名,昵称,next域
需要写构造函数
//为了显示方便,重写ToString
定义singlelinkedlist管理heronode
先初始化一个头结点,这个头结点一般不要动,如果动了,我们就找不到链表的最顶端,这个头结点我们不存放具体的数据
插入节点时,(当不考虑编号顺序)我们首先要找到最后一个结点,让这个结点的next指向新的结点
public void add(heronode heronode)
因为头结点不能动,因此我们需要一个辅助变量 heronode temp=head
遍历链表,找到最后,当temp.next=null,说明找到链表的最后了
如果没有找到最后,就将temp后移temp=temp.next
显示链表(遍历)也需要辅助变量(因为头结点不能动)
先判断链表是否为空,head.next=null
在while循环输出之后,需要后移
测试,先创建结点
添加元素与显示元素代码
public class SingleLinkedList {
public static void main(String[] args) {
NodeHero hero1 = new NodeHero(1, "宋江", "及时雨");
NodeHero hero2 = new NodeHero(2, "卢俊义", "玉麒麟");
NodeHero hero3 = new NodeHero(3, "吴用", "智多星");
NodeHero hero4 = new NodeHero(4, "林冲", "豹子头");
NodeManager singleLinkedList = new NodeManager();
singleLinkedList.add(hero1);
singleLinkedList.add(hero4);
singleLinkedList.add(hero2);
singleLinkedList.add(hero3);
singleLinkedList.list();
}
}
class NodeManager
{
private NodeHero head=new NodeHero(0,"","");
public void add(NodeHero heronode)
{
NodeHero temp=head;
while(true)
{
if (temp.next==null)
{
temp.next=heronode;
break;
}
else
{
temp=temp.next;
}
}
}
public void list()
{
if(head.next==null)
{
System.out.println("链表为空");
return;
}
NodeHero temp=head.next;
while(true)
{
if(temp == null) {
break;
}
System.out.println(temp);
temp=temp.next;
}
}
}
class NodeHero
{
private int num;
private String name;
private String nickName;
public NodeHero next;
public NodeHero(int num, String name,String nickName)
{
this.name=name;
this.num=num;
this.nickName=nickName;
}
@Override
public String toString() {
return "NodeHero{" +
"num=" + num +
", name='" + name + '\'' +
", nickName='" + nickName + '\'' +
'}';
}
}
结果
NodeHero{num=1, name='宋江', nickName='及时雨'}
NodeHero{num=4, name='林冲', nickName='豹子头'}
NodeHero{num=2, name='卢俊义', nickName='玉麒麟'}
NodeHero{num=3, name='吴用', nickName='智多星'}