<span>Java实现单链表的创建、添加、修改、删除</span>
package linkedlist; //单链表的创建、添加插入、修改、删除 public class SingleLinkedListDemo { public static void main(String[] args) { //测试 HeroNode hero1 = new HeroNode(1,"宋江","及时雨"); HeroNode hero2 = new HeroNode(2,"无哟","时雨"); HeroNode hero3 = new HeroNode(3,"后盖","及雨"); SingleLinkedList list1 = new SingleLinkedList(); // list1.add(hero1); // list1.add(hero2); // list1.add(hero3); list1.addByOrder(hero3); list1.addByOrder(hero2); list1.addByOrder(hero1); // list1.delete(3); //测试删除操作 list1.list(); // //测试修改节点方法 // System.out.println("修改后:"); // HeroNode newHeroNode = new HeroNode(4, "修改", "十大发生"); // list1.update(newHeroNode); // list1.list(); //统计节点个数测试 int a = getLength(list1.getHead()); System.out.println(); } class SingleLinkedList{ private HeroNode head = new HeroNode(0,"",""); //获取头结点 public HeroNode getHead() { return head; } //第一种添加方式,不需要按no大小排序 public void add(HeroNode heroNode){ HeroNode temp = head; while(true){ if(temp.next==null){ break; } //如果没有找到,则到下一个 temp=temp.next; } temp.next = heroNode; } //第二种添加方式,根据排名插入指定位置。(如果有这个排名,则添加失败,给出提示) public void addByOrder(HeroNode heroNode){ HeroNode temp = head; boolean flag = false; //排名编号是否存在 while(true){ if(temp.next == null){ break; } //位置找到,在temp后面插入(temp.next的编号比新插入的编号要大) if(temp.next.no > heroNode.no){ break; //找到了,直接退出循环 }else if(temp.next.no == heroNode.no){ flag=true; break; } temp = temp.next; } //这里想加等号,必须加两个== if(flag==true){ System.out.println("编号"+heroNode.no+":"+heroNode.name+" 存在,添加失败"); }else{ heroNode.next = temp.next; temp.next = heroNode; //???????? } } //修改节点信息,根据编号修改,即no编号不变 public void update(HeroNode newHeroNode){ //判断是否为空 if(head.next==null){ System.out.println("链表为空"); return; } //temp可以2种表示方法,为了简化代码 //HeroNode temp = head.next; HeroNode temp = head; boolean flag = false; while(true){ if(temp.next==null){ break; } // if(temp == null){ // break; // } // if(temp.no==newHeroNode.no){ // flag=true; //找到了 // break; // } if(temp.next.no==newHeroNode.no){ flag=true; //找到了 break; } temp = temp.next; } if(flag){ //temp.name = newHeroNode.name; temp.next.name = newHeroNode.name; //temp.nickname = newHeroNode.nickname; temp.next.nickname = newHeroNode.nickname; }else{ System.out.println("编号不存在"); } } //删除节点 //head不能动,temp表示要删除节点的前一个节点 public void delete(int no){ HeroNode temp = head; boolean flag = false; while(true){ if(temp.next == null){ break; // 到达节点尾部 } if(temp.next.no == no){ flag=true; break; } temp = temp.next; } if(flag){ temp.next = temp.next.next; }else{ System.out.println("未找到"); } } //遍历 public void list(){ //判断是否为空 if(head.next==null){ System.out.println("链表为空"); return; } //头结点不能动,创建辅助变量 HeroNode temp = head.next; while(true){ //判断是否到尾部 if(temp==null){ break; } //如果没有,就输出(toString) System.out.println(temp); //temp一定后移,否则死循环 temp = temp.next; } } } class HeroNode{ public int no; public String name; public String nickname; public HeroNode next; //构造器 public HeroNode(int no, String name, String nickname) { super(); this.no = no; this.name = name; this.nickname = nickname; } //重写toString @Override public String toString() { return "HeroNode [no=" + no + ", name=" + name + ", nickname=" + nickname + "]"; } }