“携手创作,共同成长!开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第11天,点击查看活动详情”
双向链表
2)实现双向链表的按照顺序添加链表
代码实现
定义第二种添加链表的方式
首先呢还是需要一个变量来辅助进行遍历,如果没有这个变量辅助的话是无法找到位置的 ,处于单链表当中,因此我们找到的temp是单链表的前一个节点中,否则是插入不了的。 定义一个值,用来判断是否值已经存在,若相等就给出提示,默认为false。 找到单链表的前一个节点,只有最后一个节点才会为null,这个时候就可以退出了,这里单链表的前一个节点的位置就是最后一个节点的位置,已经找到了位置,就在temp后插入即可,要添加的编号已经存在。若没有找到最后一个节点,就将值进行后移,这样程序会不断的前进,先判断flag的值有没有不一样。
HeroNode2 temp=head.next;
//定义一个值,用来判断是否值已经存在,若相等就给出提示,默认为false
boolean flag=false;
//找到单链表的前一个节点
while(true) {
//只有最后一个节点才会为null,这个时候就可以退出了,这里单链表的前一个节点的位置就是最后一个节点的位置
if(temp==null) {
break;
}
//
if(temp.no>heroNode.no) {
//已经找到了位置,就在temp后插入即可
break;
}
else if(temp.next.no==heroNode.no){
//要添加的编号已经存在
flag=true;
}
//若没有找到最后一个节点,就将值进行后移,这样程序会不断的前进
temp=temp.next;
}
//先判断flag的值有没有不一样
if(flag) {
System.out.printf("该%d已经存在,无需添加\n",heroNode.no);
}
else {
//eg:在5、7中插入6,程序执行完成后temp指向的是要插入的7
//先更新本节点的两个域
heroNode.next=temp;
heroNode.pre=temp.pre;
//将前一个节点的next指向后一个节点,将后一个节点的pre指向前一个节点
temp.pre.next=heroNode;
temp.pre=heroNode;
}
}
代码要点:eg:在5、7中插入6,程序执行完成后temp指向的是要插入的7
先更新本节点的两个域
heroNode.next=temp;
heroNode.pre=temp.pre;
将前一个节点的next指向后一个节点,将后一个节点的pre指向前一个节点
temp.pre.next=heroNode;
temp.pre=heroNode;