链表插入的主要思路: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; //标志添加的编号是否存在,默认为flase
while (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;
}
@Override
public String toString() {
return "HeroNode{" +
"no=" + no +
", heroName='" + heroName + '\'' +
", nickName='" + nickName + '\'' +
'}';
}
}