1.一个普通的单链表
public class Main {
public static void main(String[] args) {
HeroSingleLinkedList heroSingleLinkedList = new HeroSingleLinkedList();
heroSingleLinkedList.addHero(new Hero(1,"宋江","及时雨"));
heroSingleLinkedList.addHero(new Hero(2,"吴用","智多星"));
heroSingleLinkedList.addHero(new Hero(3,"李逵","黑旋风"));
heroSingleLinkedList.showHeros();
}
}
class HeroSingleLinkedList{
//有头节点
Hero head = new Hero(0,"","");
//添加
public void addHero(Hero hero){
Hero temp = head;
while (true){
if(temp.next == null){
break;
}
temp = temp.next;
}
temp.next = hero;
}
//显示链表
public void showHeros(){
if (head.next == null){
System.out.println("该链表为空");
return;
}
Hero temp = head;
while (true){
temp = temp.next;
System.out.println(temp);
if (temp.next == null){
break;
}
}
}
}
class Hero{
int num;
String name;
String nickName;
Hero next;
Hero(int num,String name,String nickName){
this.num = num;
this.name = name;
this.nickName = nickName;
next = null;
}
@Override
public String toString() {
return "Hero{" +
"num=" + num +
", name='" + name + '\'' +
", nickName='" + nickName + '\'' +
'}';
}
}
2.能实现添加时自动排序的单链表
包括按序号修改,按序号删除的方法
public class Main {
public static void main(String[] args) {
HeroSingleLinkedList heroSingleLinkedList = new HeroSingleLinkedList();
System.out.println("-------------以下是添加---------------");
heroSingleLinkedList.addByOrder(new Hero(1,"宋江","及时雨"));
heroSingleLinkedList.addByOrder(new Hero(3,"吴用","智多星"));
heroSingleLinkedList.addByOrder(new Hero(2,"李逵","黑旋风"));
heroSingleLinkedList.showHeros();
System.out.println("-------------以下是修改---------------");
heroSingleLinkedList.alterByNum(new Hero(2,"ljh","大帅哥"));
heroSingleLinkedList.alterByNum(new Hero(4,"ljh2","大帅哥"));
heroSingleLinkedList.showHeros();
System.out.println("-------------以下是删除---------------");
heroSingleLinkedList.deleteByNum(2);
heroSingleLinkedList.showHeros();
}
}
class HeroSingleLinkedList{
//有头节点
Hero head = new Hero(0,"","");
//按顺序添加
public void addByOrder(Hero hero){
Hero temp = head;
boolean flag = false;//标志是否已存在该节点
while (true){
//如果链表为空,则直接添加
if (temp.next == null){
break;
}else if (temp.next.num > hero.num){
break;
}else if (temp.next.num == hero.num){
flag = true;
}
//别忘了后移
temp = temp.next;
}
if (flag){
System.out.println("已存在相同序号节点,故无法添加");
return;
}else {
hero.next = temp.next;
temp.next = hero;
}
}
//根据序号修改
//容易错的是 要判断是不是到了最后一个
public void alterByNum(Hero hero){
Hero temp = head;
if (temp.next == null){
System.out.println("链表为空");
return;
}
boolean flag = false;//表示是否找到
while (true){
if (temp.num == hero.num){
flag = true;//找到了
break;
}
if (temp.next == null){
break;
}
temp = temp.next;
}
if (flag){
temp.name = hero.name;
temp.nickName = hero.nickName;
}else {
//表示没找到
System.out.println("已经找到最后一个了,还是没找到");
return;
}
}
//根据序号删除
public void deleteByNum(int num){
Hero temp = head;
if (temp.next == null){
System.out.println("链表为空,无法删除");
return;
}
boolean flag = false;//标志是否找到待删除节点
while (true){
if (temp.next == null){
//已经到最后一个了
break;
}
if (temp.next.num == num){
flag = true;
break;
}
temp = temp.next;
}
if (flag){
temp.next = temp.next.next;
}else {
System.out.println("没找到该节点");
return;
}
}
//显示链表
public void showHeros(){
if (head.next == null){
System.out.println("该链表为空");
return;
}
Hero temp = head;
while (true){
temp = temp.next;
System.out.println(temp);
if (temp.next == null){
break;
}
}
}
}
class Hero{
int num;
String name;
String nickName;
Hero next;
Hero(int num,String name,String nickName){
this.num = num;
this.name = name;
this.nickName = nickName;
next = null;
}
@Override
public String toString() {
return "Hero{" +
"num=" + num +
", name='" + name + '\'' +
", nickName='" + nickName + '\'' +
'}';
}
}