package learn;
public class DoubleLinkList {
DNode head;
DNode temp;
public DoubleLinkList(DNode head) {
this.head = head;
}
public DoubleLinkList() {
head = new DNode();
}
public void addByOrder(DNode dNode){
temp= head.next;
DNode flag = new DNode();
if(temp==null){
head.next=dNode;
dNode.pre=head;
return;
}
while(temp!=null){
if(temp.data>dNode.data){
break;
}
flag=temp;
temp=temp.next;
}
if(temp!=null){
temp.pre.next=dNode;
dNode.pre=temp.pre;
temp.pre=dNode;
dNode.next=temp;
}else
{ flag.next=dNode;//加一個這個臨時變量的變量很重要,可以預防temp在結束時都不滿足,變成指向null退出,去掉空指針異常
dNode.pre=flag;
}
}
public void delete(DNode dNode){
boolean flag=false;
temp=head.next;
if(head.next==null){
return;
}
while(true){
if(temp==null){
break;
}
if(temp.data==dNode.data){
flag=true;
break;
}
temp=temp.next;
}
if(flag==true){
temp.pre.next=temp.next;
if(temp.next!=null){
temp.next.pre=temp.pre;//這裏要對temp進行判斷,是不是最後一個,下邊的else將遍歷完都沒找到的所有情況都概括了
}
}else {
System.out.println("沒這個東西!");
}
}
public void list(){
if(head.next==null){
return;
}
temp=head.next;
while (true){
if(temp==null){
break;
}
System.out.println(temp);
temp=temp.next;
}
}
public static void main(String[] args) {
DoubleLinkList doubleLinkList = new DoubleLinkList();
doubleLinkList.addByOrder(new DNode(4));
doubleLinkList.addByOrder(new DNode(1));
doubleLinkList.addByOrder(new DNode(3));
doubleLinkList.addByOrder(new DNode(6));
doubleLinkList.list();
doubleLinkList.delete(new DNode(3));
doubleLinkList.list();
}
}
class DNode{
public int data;
public DNode pre;
public DNode next;
public DNode() {
}
public DNode(int data) {
this.data = data;
}
@Override
public String toString() {
return "DNode{" +
"data=" + data +
'}';
}
}
java複習之雙向鏈表
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.