链表是有序的列表,但是它在内存中是存储如下
1 链表是以节点的方式来存储,是链式存储
2 每个节点包含 data 域, next 域:指向下一个节点.
3 如图:发现链表的各个节点不一定是连续存储.
4 链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定
增
删
改
package com.wang;
public class SingleList {
public static void main(String[] args) {
HeroNode hero1 = new HeroNode(1,"宋江","及时雨");
HeroNode hero2 = new HeroNode(2,"卢俊义","玉麒麟");
HeroNode hero3 = new HeroNode(3,"吴用","智多星");
SingleList1 singleList = new SingleList1();
singleList.add1(hero1);
singleList.add1(hero2);
singleList.add1(hero3);
singleList.list();
System.out.println("修改后");
HeroNode hero2_1 = new HeroNode(2,"卢本伟","赌怪");
singleList.update(hero2_1);
singleList.del(1);
singleList.list();
}
}
/*
* 该类用于管理我们的英雄
*/
class SingleList1{
//先初始化一个头结点,该节点不要动,只是起到标识作用
private HeroNode head=new HeroNode(0,"","");
/**
* 添加节点
* 暂不考虑排名,只是把新节点放到末尾
*/
public void add(HeroNode heroNode) {
//辅助遍历节点temp
HeroNode temp=head;
while (true) {
//找到最后一个节点,结束循环
if (temp.next==null) {
break;
}
temp = temp.next;
}
//循环结束后,temp就到达了尾结点,然后将信息赋给它的下一个节点
temp.next=heroNode;
}
/**
* 添加节点
* 根据排名添加
* 找到最后一个节点,结束循环
* 找到要插入的位置,结束循环
* 找到排名相同的,结束循环
*/
public void add1(HeroNode heroNode) {
//辅助遍历节点temp
HeroNode temp=head;
boolean flag=false;
while (true) {
if (temp.next==null) {
break;
}
if (temp.next.no>heroNode.no) {
break;
}else if(temp.next.no==heroNode.no){
flag = true;
break;
}
temp = temp.next;
}
//根据flag的值判断能否插入
if (flag) {
System.out.println(heroNode.no+"已存在,不能重复添加");
}else {
heroNode.next=temp.next;
temp.next=heroNode;
}
}
/**
* 修改节点信息,根据编号进行查找
*/
public void update(HeroNode newHeroNode) {
HeroNode temp=head;
boolean flag=false;
while(true) {
if (temp.next==null) {
break;
}
if (temp.no==newHeroNode.no) {
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
temp.name =newHeroNode.name;
temp.nickname=newHeroNode.nickname;
}else {
System.out.println("未找到"+newHeroNode.no);
}
}
/**
* 删除节点
*/
public void del(int no) {
HeroNode temp=head;
boolean flag=false;
while(true) {
if (temp.next==null) {
break;
}
if (temp.next.no==no) {
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
temp.next=temp.next.next;
}else {
System.out.println("未找到"+no);
}
}
//显示链表
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.next;
}
}
}
/**
* 该类用于定义及初始化
*/
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 + "]";
}
}