链表插入的主要思路:1.把temp.next域给新节点.next 即 newNode.next=temp.next
2.temp.next指向新节点 即 temp.next=newNode
public class LinkList {public static void main(String[] args) {//进行测试//先创建节点HeroNode heroNode = new HeroNode(1, "宋江", "及时雨");HeroNode heroNode2 =new HeroNode(2,"卢俊义","玉麒麟");HeroNode heroNode3 =new HeroNode(3,"吴用","智多星");HeroNode heroNode4 =new HeroNode(4,"林冲","豹子头");//创建要给的链表LinkedNode linkedNode =new LinkedNode();linkedNode.addByOrder(heroNode);linkedNode.addByOrder(heroNode4);linkedNode.addByOrder(heroNode2);linkedNode.addByOrder(heroNode2);linkedNode.addByOrder(heroNode3);linkedNode.list();}
}
class LinkedNode{private HeroNode head=new HeroNode(0,"","");//定义头节点public void addNode(HeroNode heroNode){HeroNode temp=head; //定义一个temp指向头节点while (true){if(temp.next==null){break;}//如果没有找到最后,将temp后移temp=temp.next;}//当退出的时候temp就指向了链表的最后temp.next=heroNode;}public void addByOrder(HeroNode heroNode){//因为头节点不能动,因此我们仍然通过一个辅助指针来帮助找到添加的位置//因为单链表,我们找的temp是位于添加位置的前一个节点,否则插入不了HeroNode temp =head;boolean flag=false; //标志添加的编号是否存在,默认为flasewhile (true){if(temp.next==null){//说明temp已经到了链表的最后break;}if(temp.next.no>heroNode.no){//位置找到,就在temp的后面插入break;}else if(temp.next.no==heroNode.no){//说明希望添加的heroNoded的编号已然存在flag=true;break;}temp=temp.next; //后移,遍历链表}if(flag==true){ //不能添加 编号存在System.out.printf("准备插入的英雄编号%d已经存在,不能加入\n",heroNode.no);}else {//插入到链表中,temp的后面heroNode.next=temp.next;temp.next=heroNode;}}//遍历显示public void list(){//判断链表是否为空if(head.next==null){return;}//因为头节点不能动,因此我们需要一个辅助变量来遍历HeroNode temp =head.next;while (true){//判断是否到链表最后if(temp==null){break;}//输出节点的信息System.out.println(temp);//将next后移temp=temp.next;}}}class HeroNode {public int no;public String heroName;public String nickName;public HeroNode next;public HeroNode(int no, String heroName, String nickName) {this.no = no;this.heroName = heroName;this.nickName = nickName;}public int getNo() {return no;}public void setNo(int no) {this.no = no;}public String getHeroName() {return heroName;}public void setHeroName(String heroName) {this.heroName = heroName;}public String getNickName() {return nickName;}public void setNickName(String nickName) {this.nickName = nickName;}public HeroNode getNext() {return next;}public void setNext(HeroNode next) {this.next = next;}@Overridepublic String toString() {return "HeroNode{" +"no=" + no +", heroName='" + heroName + '\'' +", nickName='" + nickName + '\'' +'}';}
}