package com.m.demo4;
public class doubleNode {
public int id;
public String name;
public doubleNode next;
public doubleNode pre;
public doubleNode(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "doubleNode [id=" + id + ", name=" + name + "]";
}
}
package com.m.demo4;
public class doubleTest {
doubleNode head = new doubleNode(0, "");
public void addById(doubleNode newNode) {
doubleNode temp=head;
boolean flag=false;//是否有相同的
boolean isExit=false;
while(true) {
// System.out.printf("temp.id=%d,newNode.id=%d\n",temp.id,newNode.id);
if(temp.id>newNode.id) {
isExit=true;
break;//此时已经找到了合适的位置
}
if(temp.id==newNode.id) {
flag=true;
break;
}
if(temp.next==null) {//到了最后
break;
}
temp=temp.next;
}
// System.out.println("temp.id>newNode.id:"+(temp.id>newNode.id));
//开始判断
// System.out.println("temp="+temp);
if(flag) {
System.out.println(newNode.id+"已经存在了");
}else if(isExit) {
temp.pre.next=newNode;
newNode.pre=temp.pre;
newNode.next=temp;
temp.pre=newNode;
}else {
temp.next=newNode;
newNode.pre=temp;
}
}
public void show() {
doubleNode temp=head.next;
while(true) {
if(temp==null) {
break;
}
System.out.println(temp);
temp=temp.next;
}
}
}
package com.m.demo4;
public class test3 {
public static void main(String[] args) {
doubleTest dt=new doubleTest();
doubleNode n1=new doubleNode(1,"小A");
doubleNode n2=new doubleNode(2,"小B");
doubleNode n3=new doubleNode(3,"小C");
doubleNode n4=new doubleNode(4,"小D");
dt.addById(n4);
dt.addById(n1);
dt.addById(n3);
dt.addById(n2);
dt.show();
}
}
注意:当元素到达最后一个是有三种情况的:
1、没有找到合适的位置
2、找了合适的位置且这个元素刚好是最后一个
3、最后一个元素和前面的元素重复了
所以是需要判断的:如果是重复了,就直接输出返回,而如果是没有合适的位置,就连接在末尾,但是如果是刚好是最后一个,就需要前插。