一、链表介绍
链表是有序的列表,,但是他在内存中的存储如下
小结:
1.链表是以节点的方式来存储的,是链式存储。
2.每个节点包含data域,next域:指向下一个节点。
3.如图:发现链表的各个节点不一定是连续存储
4.链表分带头节点的与没有头节点的链表,根据实际需求来决定。
链表(带头节点)的逻辑结构如下
二、代码实现
这里演示的是带头节点的不按顺序的链表
HeroNode.class
public class HeroNode {
public int no;
public String name;
public String nickName;
public HeroNode next;
public HeroNode(int no, String name, String nickName) {
super();
this.no = no;
this.name = name;
this.nickName = nickName;
}
@Override
public String toString() {
return "HeroNode [no=" + no + ", name=" + name + ", nickName=" + nickName + "]";
}
}
HeroLinkedList.class
public class HeroLinkedList {
//初始化头节点,不需要存放数据
private HeroNode head = new HeroNode(0, "", "");
//添加节点到单向链表
//思路不考虑编号顺序
//1.找到当前链表的最后节点
//2.将最后这个节点的next 指向 新的节点
public void add (HeroNode node) {
//因为head节点不能动,因此我们需要一个辅助遍历temp
HeroNode temp = head;
while(true) {
//找到的条件
if(temp.next == null) {
break;
}
//如果没有找到,就接着找下一个
temp = temp.next;
}
temp.next = node;
}
public void list() {
if(head.next==null) {
System.out.println("链表为空!");
}
HeroNode temp = head.next;
while(true) {
if(temp == null) {
break;
}
System.out.println(temp);
temp = temp.next;
}
}
}
测试类
public class HeroLinkedListDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
HeroNode h1 = new HeroNode(1, "宋江", "及时雨");
HeroNode h2 = new HeroNode(2, "卢俊义", "玉麒麟");
HeroNode h3 = new HeroNode(3, "吴用", "智多星");
HeroNode h4 = new HeroNode(4, "林冲", "豹子头");
HeroLinkedList hll = new HeroLinkedList();
hll.add(h1);
hll.add(h2);
hll.add(h3);
hll.add(h4);
hll.list();
}
}