链表是有序的,这是内存空间示意图
- 链表是以节点的方式来存储
- 每个节点包含data域,next域:指向下一个结点
- 链表的各个元素不一定是连续存储的
- 链表分为有头节点和没有头节点的链表
- 链表循环时:temp = temp.next;
- 删除和插入元素时:都要找到待插入位置的前一个元素
package LinkedList;
public class SingleLinkedList {
public static void main(String[] args) {
//创建链表类
SingleLinked singleLinked = new SingleLinked();
//创建不可动的头节点
Hero hero1 = new Hero(1,"宋江","及时雨");
Hero hero2 = new Hero(2,"卢俊义","玉麒麟");
Hero hero3 = new Hero(3,"吴用","智多星");
Hero hero4 = new Hero(4,"林冲","豹子头");
//添加数据
singleLinked.addLinkedList(hero1);
singleLinked.addLinkedList(hero4);
singleLinked.addLinkedList(hero2);
singleLinked.addLinkedList(hero3);
//展示数据
singleLinked.showLinked(singleLinked);
//删除节点
singleLinked.del(2);
//展示数据
System.out.println("链表删除后~~~");
singleLinked.showLinked(singleLinked);
//更新数据
hero1.name = "胖头鱼";
hero1.nickName = "大胖头鱼";
singleLinked.updata(hero1);
//展示数据
System.out.println("更改信息后的数据");
singleLinked.showLinked(singleLinked);
}
}
class SingleLinked{
//创建头节点
private Hero head = new Hero(0,"","");
//有序添加数据
public void addLinkedList(Hero hero){
//接收头节点
Hero temp = head;
//定义标识符
boolean s =false;
//遍历链表,找到链表的尾部
while (true){
if(temp.next==null){//若没有数据,则直接插入
s = true;
break;
}
if(temp.no < hero.no && temp.next.no > hero.no){//若满足条件,则退出循环
s =true;
break;
}
//未找到满足条件的式子,继续循环
temp=temp.next;
}
//判断标识符
if(s){
hero.next = temp.next;//让新节点指向temp.next
temp.next = hero;//让temp节点指向新节点
}
}
public void showLinked(SingleLinked singleLinked){//展示数据
//接收头节点
Hero temp =head.next;
//遍历链表
while (true){
if(head.next==null){//判断head指针域是否为空
System.out.println("链表为空");
}
if(temp == null){//判断是否查询到底
break;
}
System.out.println(temp);
temp = temp.next;//继续循环
}
}
public void del(int no){//删除节点
//接收头节点
Hero temp = head;
//循环链表
while (true){
if(temp.next == null){//判断指针与有没有数据
System.out.println("链表为空");
break;
}
if(temp.next.no == no){//寻找指定排名的数据
temp.next = temp.next.next;//讲前一个节点与后一个几点相连
break;
}
temp = temp.next;//继续循环
}
}
public void updata(Hero hero){//更改信息
//接受头节点
Hero temp = head;
//循环遍历链表
while (true){
if(temp.no == hero.no){
//更改信息
temp.name=hero.name;
temp.nickName=hero.nickName;
break;
}
temp = temp.next;
}
}
}
class Hero{
public int no;//排名
public String name;//姓名
public String nickName;//昵称
public Hero next;//指针域
public Hero(int no, String name, String nickName) {//构造方法
this.no = no;
this.name = name;
this.nickName = nickName;
}
@Override
public String toString() {//toString方法
return "Hero{" +
"no=" + no +
", name='" + name + '\'' +
", nickName='" + nickName + '\'' +
'}';
}
}
学完老韩数据结构总结的