package com.zhen.linkedlist;
public class SinglelinkedListDemo {
public static void main(String[] args) {
Heronode heroNode1 = new Heronode(1, "宋江", "及时雨");
Heronode heroNode2 = new Heronode(2, "卢俊义", "玉麒麟");
Heronode heroNode3 = new Heronode(3, "吴用", "智多星");
Heronode heroNode4 = new Heronode(4, "林冲", "豹子头");
Heronode heroNode5 = new Heronode(1, "李逵", "黑旋风");
SingleLickedList singleLickedList = new SingleLickedList();
singleLickedList.addByOrder(heroNode1);
singleLickedList.addByOrder(heroNode2);
singleLickedList.addByOrder(heroNode4);
singleLickedList.addByOrder(heroNode3);
singleLickedList.showNode();
System.out.println("删除之后的是:");
singleLickedList.deleteNode(heroNode5);
singleLickedList.showNode();
}
}
//有头结点的链表,头结点不存放任何的数据,作用就是单链表的头
//定义一个SingleLickedList,管理英雄
class SingleLickedList{
private Heronode head=new Heronode(0,"","");
//添加结点到单向链表,在不考虑编号顺序时,先找到当前链表的最后一个结点,将最后这个结点的next指向新添的结点
public void addNode(Heronode heroNode){
//head结点不能动,需要一个辅助结点temp
Heronode temp=head;
while (true){
if(temp.next==null) break;
temp=temp.next;
}
temp.next=heroNode;
}
//按照顺序插入
public void addByOrder(Heronode heroNode){
//头结点不能动,需要一个辅助结点temp
//因为是单链表,因此找的temp位于要添加位置的前一个结点
Heronode temp=head;
boolean flag=false;
while (true){
if (temp.next==null) break;
else if(temp.next.no>heroNode.no){
break;
}
else if(temp.next.no== heroNode.no){
flag=true;
break;
}
temp=temp.next;
}
if(flag){
System.out.printf("编号为%d的英雄已经存在n",temp.next.no);
}
else{
heroNode.next=temp.next;
temp.next=heroNode;
}
}
//更新链表,根据编号no来修改nickName
public void update(Heronode newHeroNode){
if(head.next==null){
System.out.println("链表为空");
return;
}
Heronode temp=head;
boolean flag=false;
while (true){
if (temp.next==null){
flag=true;
break;
}
else if(temp.next.no== newHeroNode.no){
break;
}
temp=temp.next;
}
if(flag){
System.out.println("所修改的英雄的编号不存在");
}
else{
temp.next.nickName= newHeroNode.nickName;
temp.next.name= newHeroNode.name;
}
}
//按照编号no删除
public void deleteNode(Heronode heroNode){
if (head.next==null){
System.out.println("链表为空,无法删除");
return;
}
Heronode temp=head;
boolean flag=false;
while (true){
if(temp.next==null){
flag=true;
break;
}
else if (temp.next.no==heroNode.no){
break;
}
temp=temp.next;
}
if(flag){
System.out.println("没有找到此编号");
}else{
temp.next=temp.next.next;
}
}
public void showNode(){
//先判断链表是否为空
if(head.next==null){
System.out.println("链表为空,无法打印");
return;
}
Heronode temp=head.next;
while (true){
if (temp==null) break;
System.out.println(temp.toString());
temp=temp.next;
}
}
}
class HeroNode{
public int no;
public String name;
public String nickName;
public Heronode next;//指向下一个结点,简单理解就是赋值,这个结点的next就是下一个结点的值
public Heronode(int no, String name, String nickName) {
this.no = no;
this.name = name;
this.nickName = nickName;
}
@Override
public String toString() {
return "HeroNode{" +
"no=" + no +
", name='" + name + ''' +
", nickName='" + nickName + '''+"}";
}
}
根据尚硅谷的数据结构与算法实现,用于复习



