package?com.structures.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,?"林沖",?"豹子頭");
SingleLinkedList?singleLinkedList?=?new?SingleLinkedList();
singleLinkedList.addByNo(heroNode3);
singleLinkedList.addByNo(heroNode2);
singleLinkedList.addByNo(heroNode4);
singleLinkedList.addByNo(heroNode1);
singleLinkedList.list();
}
}
//定義SingleLinkedList管理我們的英雄
class?SingleLinkedList?{
//先初始化一個頭節點,頭節點不能動,將來遍歷用
private?HeroNode?head?=?new?HeroNode(0,?"",?"");
//添加節點到單向鏈表
//思路:當不考慮編號的順序時
//1.?找到當前鏈表的最后節點
//2.?將最后這個節點的next域指向新的節點
public?void?add(HeroNode?node)?{
//因為head節點不能動,因此我們需要一個輔助遍歷temp
HeroNode?temp?=?head;
//遍歷鏈表,找到最后
while?(temp.next?!=?null)?{
//找到鏈表的最后
//如果沒有找到temp就后移
temp?=?temp.next;
}
temp.next?=?node;
}
//第二種添加英雄的方式,在添加英雄時,根據排名將英雄插入到指定位置
//如果有這個排名,則添加失敗,并給出提示
public?void?addByNo(HeroNode?heroNode)?{
//因為head節點不能動,因此我們需要一個輔助遍歷temp
//因為單鏈表,因此找的temp是位于添加位置的前一個節點,否則加入不了
HeroNode?temp?=?head;
boolean?flag?=?false;//標識添加的編號是否存在,默認false
while?(true)?{
if?(temp.next?==?null)?{
break;
}
if?(temp.next.no?>?heroNode.no)?{//位置找到,就在temp的后面插入
break;
}?else?if?(temp.next.no?==?heroNode.no)?{
//編號已存在
flag?=?true;
break;
}
temp?=?temp.next;
}
if?(flag)?{
System.out.printf("準備插入的英雄的編號?%d?已存在,不能加入\n",?heroNode.no);
}?else?{
//插入鏈表temp的后面
heroNode.next?=?temp.next;
temp.next?=?heroNode;
}
}
//顯示鏈表[遍歷]
public?void?list()?{
//判斷鏈表是否為空
if?(head.next?==?null)?{
System.out.println("鏈表為空");
}
//因為頭節點不能動,因此我們需要一個輔助變量來遍歷
HeroNode?temp?=?head.next;
while?(temp?!=?null)?{
//判斷是否到最后
//輸出節點的信息
System.out.println(temp);
//將temp后移
temp?=?temp.next;
}
}
}
//定義一個HeroNode,每個HeroNode對象就是一個節點
class?HeroNode?{
public?int?no;
public?String?name;
public?String?nickName;
public?HeroNode?next;//指向下一個節點
//構造器
public?HeroNode(int?no,?String?name,?String?nickName)?{
this.no?=?no;
this.name?=?name;
this.nickName?=?nickName;
}
public?HeroNode?getNext()?{
return?next;
}
public?void?setNext(HeroNode?next)?{
this.next?=?next;
}
@Override
public?String?toString()?{
return?"HeroNode{"?+
"no="?+?no?+
",?name='"?+?name?+?'\''?+
",?nickName='"?+?nickName?+?'\''?+
'}';
}
}
/*
HeroNode{no=1,?name='宋江',?nickName='及時雨'}
HeroNode{no=2,?name='盧俊義',?nickName='玉麒麟'}
HeroNode{no=3,?name='吳用',?nickName='智多星'}
HeroNode{no=4,?name='林沖',?nickName='豹子頭'}
*/