B站学习尚硅谷的Java数据结构和算法之后的结果记录:
(学编程的一年级新生)每天进步一点
package SingleLinkListDemo;
public class SingleLinkListDemo {
public static void main(String[] args) {
// 测试链表
HeroNode hero1=new HeroNode(1,"宋江","及时雨");
HeroNode hero3=new HeroNode(3,"智障","无用");
HeroNode hero2=new HeroNode(2,"武松","行者");
SingleLinkList singleLink;
SingleLinkList singleLinkList =new SingleLinkList();
// singleLinkList.addLinkList(hero1); //没有编号顺序的添加
// singleLinkList.addLinkList(hero3);
// singleLinkList.addLinkList(hero2);
singleLinkList.add2(hero1); //排序添加按照编号
singleLinkList.add2(hero3);
singleLinkList.add2(hero2);
singleLinkList.showLinkList();
//测试update方法
HeroNode newhero=new HeroNode(3,"智惰星","吴用");
singleLinkList.update(newhero);
System.out.println("修改之后的结果显示--------");
singleLinkList.showLinkList();
}
}
//定义一个SingLinkList类管理链表
class SingleLinkList{
private HeroNode head=new HeroNode(0,"","");
public void addLinkList(HeroNode heroNode) {
//添加节点到链表
//1.找到连边最后一个节点
//2.将最后一个节点的next链接到新的节点
HeroNode temp = head;
while(true) {
if(temp.next==null) {
break;
}
temp=temp.next;
}//执行结束while之后,temp指向链表的最后一个节点
temp.next=heroNode;
}
//第二种添加节点的方法,按编号的顺序添加
public void add2(HeroNode heroNode) {
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.printf("需要添加的英雄编号%d已经存在,无法添加",heroNode.no);
}else {
heroNode.next=temp.next;
temp.next=heroNode;
}
}
//对已有数据进行修改和更新
public void update(HeroNode newheronode) {
//判断链表是否为空
if(head.next==null) {
System.out.println("链表为空,没有数据");
return;
}
//开始寻找需要修改的节点
HeroNode temp=head.next;
boolean flag=false;
while(true) {
if(temp==null) {
//链表已经遍历结束
break;
}
if(temp.no==newheronode.no) {
flag = true;
break;
}
temp=temp.next;
}
if(flag) {
temp.name=newheronode.name;
temp.nikname=newheronode.nikname;
}else {
System.out.println("查找无结果,无法修改");
}
}
//链表的删除操作
public void del(int no) {
HeroNode temp=head;
boolean flag=false;
while(true) {
if(temp.next==null) {
System.out.println("链表为空");
break;
}else if(temp.next.no==no){
flag=true;
break;
}
temp=temp.next;
}
if(flag) {
temp.next=temp.next.next;
}else {
System.out.println("查找无果,无法删除");
}
}
public void showLinkList() {
//判断链表是否为空
if(head.next==null) {
System.out.println("链表为空");
return;
}
//继续申请一个辅助变量
HeroNode temp1=head.next;
while (temp1!=null) {
System.out.println(temp1);
temp1=temp1.next;
}
}
}
class HeroNode{
public int no;
public String name;
public String nikname;
public HeroNode next;
//构造器
public HeroNode(int no,String name,String nikname) {
this.no=no;
this.name=name;
this.nikname=nikname;
}
@Override
public String toString() {
return "HeroNode [no=" + no + ", name=" + name + ", nikname=" + nikname + "]";
}
}