链表第一篇
1.介绍
- 列表是以节点的方式进行存储的
- 每一个节点包括data域, next域
- 链表的各个节点不一定是连续存放的
- 链表分为带头节点的链表和不带头结点的链表,根据实际情况来确定
1.1头节点
- 不存放具体数据的节点
- 作用就是表示的单链表的头
- next域指向下一个节点
节点名称 | 指向节点 |
---|---|
head | next域 |
代码:
package Package01;
import com.sun.xml.internal.bind.v2.runtime.unmarshaller.XsiNilLoader;
public class SingleLinkedListDemo {
public static void main(String[] args) {
//进行一个测试
//先创建节点
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.add(hero1);
singleLinkedList.add(hero2);
singleLinkedList.add(hero3);
singleLinkedList.add(hero4);
//显示一把
singleLinkedList.list();
}
}
//定义SingleLinkedList来管理英雄人物
class SingleLinkedList{
//先初始化一个头节点,头节点不要动,不存放具体的数据
private HeroNode head = new HeroNode(0,"","");
//添加节点到单向链表
//思路,当不考虑编号顺序的时候
//1.找到当前链表的最后节点
//2.将最后的节点的next域指向新的节点即可
public void add(HeroNode heroNode){
//因为head不能动。我们需要一个辅助遍历temp
HeroNode temp = head;
//遍历链表,找到最后的节点
while(true){
//如果没有找到最后一个节点,将temp往后移一位
if(temp.next == null){
break;
}
//如果没有找到,让temp往后面移动一位
temp = temp.next;
}
//当退出while循环的时候,temp指向链表的最后
temp.next = heroNode;
}
//显示链表,遍历
public void list(){
//需要一个辅助变量
//先判断链表是否为空
if(head.next == null){
System.out.println("链表为空");
return;
}
//头节点不能动,因此我们需要一个辅助变量需要遍历
HeroNode temp = head.next;
while(true){
//判断是否到了链表的最后
if(temp == null){
break;
}
//如果不为空,就输出节点的信息
System.out.println(temp);
//temp后移,一定要后移
temp = temp.next;
}
}
}
class HeroNode{
public int no;
public String name;
public String nickname;
public HeroNode next;
public HeroNode(int hNo,String hName,String hNickname){
this.no = hNo;
this.name = hName;
this.nickname = hNickname;
}
@Override
public String toString(){
return "HeroNode [no="+ no +",name=" + name + ",nickname=" + nickname + "]";
}
}
输出:
"C:\Program Files\Java\jdk1.8.0_152\bin\java.exe" "-javaagent:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\lib\idea_rt.jar=53370:D:\软件下载\idea\idea\IntelliJ IDEA 2021.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_152\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_152\jre\lib\rt.jar;E:\刘建成\java\project\HSP\out\production\Modulate03" Package01.SingleLinkedListDemo
HeroNode [no=1,name=宋江,nickname=及时雨]
HeroNode [no=2,name=卢俊义,nickname=玉麒麟]
HeroNode [no=3,name=吴用,nickname=智多星]
HeroNode [no=4,name=林冲,nickname=豹子头]
Process finished with exit code 0