链表按顺序添加

需要让新的数据2的next2节点指向下一个节点,数据4的位置,通过辅助指针 ,当新的节点的.next域==temp.next域的时候

,添加到数据4之前,同时temp.next域指向新插入的节点

这样新的节点就被插入进1和4之间了

 

 

class SingleLinkedList{
//先初始化一个头节点 不能动 不存放具体数据 只找到下一个节点位置
private HeroNode head = new HeroNode(0,"","");
//添加节点到单向链表 当不考虑编号顺序时,找到当前链表的最后节点,将最后的这个节点的next 指向新的节点
public void add(HeroNode heroNode){
//头节点不能动, 需要辅助变量(指针)
HeroNode temp = head;//头节点的属性自带next 本身也是节点
//遍历链表,找到最后
while (true) {//如果.next为空,即找到结尾
if (temp.next == null) {
break;//已经到最后了
}//如果没有找到,就将temp后移动相当于temp指针往后直到next==null
temp =temp.next;
}//当推出while循环时,temp就指向了来年表的最后
//将最后这个节点的next,指向新的节点
temp.next=heroNode;
}
//第二种添加的方式
public void addbyorder(HeroNode heroNode){
//因为头节点不能动 所以依然需要辅助指针帮助寻找添加的位置
HeroNode temp = head;
boolean flag= false;//添加的编号,是否存在,默认为false,已经存在的能添加
while (true) {
if (temp.next == null) {
break;
}//要用temp的下一个节点来比较,不能用本身来比较 当新的节点的.next域==temp.next域的时候
if(temp.next.no>heroNode.no){ //如果temp.next==4,4比要添加的2大,意思就是放到temp和temp.next中间
break;
} else if (temp.next.no == heroNode.no) {//说明添加的heronode的编号已然存在
flag= true;
break;
}
// else {
// System.out.println("添加出错了");
// }
temp=temp.next;//后移,遍历当前链表
}
if(flag){//不能添加 已存在
System.out.println("插入的编号已经存在");
}
else {
heroNode.next = temp.next ;//新的节点.next = temp.next
temp.next=heroNode; //temp.next = 新的节点
}
}
public void showLinkNode(){//需要一个辅助变量,帮助遍历真个链表
if(head.next==null){
return;
}//因为头节点不能动,所以需要辅助变量
HeroNode temp = head.next;
while (true) {
//判断是否是链表的最后
if (temp == null) {
break;
}
System.out.println(temp);
temp=temp.next;
}

}
}
posted @ 2021-10-29 16:59  lamda表达式先驱  阅读(145)  评论(0)    收藏  举报