双向链表 (2)

70 阅读2分钟

“携手创作,共同成长!开启掘金成长之旅!这是我参与「掘金日新计划 · 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;