- 单链表的介绍
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
2.
3
4代码的实现
public class SingleLinkedList {
public static void main(String[] args) {
HeroLink hero1=new HeroLink(1,"宋江","及时雨");
HeroLink hero2=new HeroLink(2,"林冲","豹子头");
HeroLink hero3=new HeroLink(3,"林冲","豹子头");
SingleLinkedHead singleLinkedHead=new SingleLinkedHead();
// singleLinkedHead.addLinked(hero1);
// singleLinkedHead.addLinked(hero2);
// singleLinkedHead.addLinked(hero3);
//测试根据id插入
singleLinkedHead.addLinkedSort(hero1);
singleLinkedHead.addLinkedSort(hero3);
singleLinkedHead.addLinkedSort(hero2);
//测试修改的功能
HeroLink hero4=new HeroLink(2,"萧炎","萧火火");
singleLinkedHead.update(hero4);
//测试删除
//singleLinkedHead.remove(4);
//测试查
singleLinkedHead.select(3);
//显示所有链表
// singleLinkedHead.showLinked();
}
}
//定义一个头结点来管理我们的链表
class SingleLinkedHead{
private HeroLink head=new HeroLink(0,"","");//添加一个头结点方便管理,头结点不存放东西
public void addLinked(HeroLink heroLink){
//因为head不能动,使用设置一个辅助结点temp
HeroLink temp=head;
while (true){
if(temp.next==null){
break;
}
//如果没有找到就将temp下移一位
temp=temp.next;
}
temp.next=heroLink;
}
//链表的更新,根据no
public void update(HeroLink heroLink){
//temp3是辅助结点
HeroLink temp3=head.next;
if (head.next==null){
System.out.println("链表为空");
}
while (true){
if (temp3.next.no==heroLink.no){
temp3.next.nNickName=heroLink.nNickName;
temp3.next.name=heroLink.name;
break;
}
else if(temp3.next==null){
System.out.println("没有这个序号的英雄");
break;
}
temp3=temp3.next;
}
}
//链表的查找
public void select(int no){
//设置辅助结点
HeroLink temp5=head;
while (true){
if (temp5.next.no==no){
System.out.println(temp5.next.toString());
break;
}
temp5=temp5.next;
}
}
//链表的删除
public void remove(int no){
//设置辅助结点
HeroLink temp4=head;
boolean flag=false;
if (head.next==null){
System.out.println("链表为空");
}
while (true){
if(temp4.next==null&&temp4.no!=no){
System.out.printf("不存在序号为%d的数据",no);
break;
}
else if (temp4.next.no==no){
flag=true;
break;
}
temp4=temp4.next;
}
if (flag){
temp4.next=temp4.next.next;
}
}
//能够有序的插入,列如1432 变成1234
public void addLinkedSort(HeroLink heroLink){
//辅助结点
HeroLink temp2=head;
boolean flag=false;
while(true){
if (temp2.next==null){
break;
}
if (temp2.next.no>heroLink.no){
break;
}
else if(temp2.next.no==heroLink.no){
// System.out.printf("已经存在序号为%d的英雄了",heroLink.no);
flag=true;
break;
}
temp2=temp2.next;
}
if (flag){
System.out.printf("已经存在序号为%d的英雄了",heroLink.no);
}
else{
heroLink.next=temp2.next;
temp2.next=heroLink;
}
}
public void showLinked(){
HeroLink temp1=head.next;
while (true){
if (temp1==null){
break;
}
else {
System.out.println(temp1.toString());
temp1=temp1.next;
}
}
}
}
class HeroLink{
public int no;
public String name;
public String nNickName;
public HeroLink next;//指向下一个结点
//构造方法
public HeroLink(int no,String name,String nNickName){
this.name=name;
this.no=no;
this.nNickName=nNickName;
}
//
@Override
public String toString() {
return "HeroLink{" +
"no=" + no +
", name='" + name + '\'' +
", nNickName='" + nNickName + '\''+
'}';
}
}