Java 用雙向循環鏈表實現 遍歷


package day2;

/**
* 構建雙向循環鏈表,實現遍歷功能
*/
public class DoubleLB {

public static void main(String[] args) {
DoubleLB doubleLB = new DoubleLB();
doubleLB.creatCicle(100);
doubleLB.doubbl(30);
}
//頭結點
Entry head;
void creatCicle(int length){
for(int i= 1; i<=length;i++){
Entry newEntry = new Entry(i*2);
//初始化頭結點,把next和pre都指向自己
if(i==1){
head = new Entry(null,null,1);
head.next = head;
head.pre = head;
}else{
/**
* 1 :新增節點newEntry 的next指向 頭結點 head
* 2: newEntry的pre 指向 head的pre。這里頭結點的pre可以看做 最后一個節點(便於理解),也就是要插入新節點的位置 前一個節點
* 3: 插入新節點的位置 前一個節點 的next指向 newEntry
* 4:頭結點的pre 指向newEntry。
*/
newEntry.next =head;
newEntry.pre = head.pre;
//head.pre.next = newEntry;//new.pre.next =newEntry
newEntry.pre.next = newEntry;
head.pre = newEntry;

}
}
}

/**
* 這里查看鏈表上的節點的字段number 是否有等於 輸入的number。用到了雙向遍歷
* @param number
*/
void doubbl(int number){
Entry nextNode = head.next;
Entry preNode = head.pre;

while(nextNode != preNode){
System.out.println("next"+nextNode.getNumber()+": pre"+preNode.getNumber());
if(nextNode.getNumber() == number || preNode.getNumber() ==number){
System.out.println(" find next"+nextNode.getNumber()+": pre"+preNode.getNumber());
return;
}
nextNode=nextNode.next;
preNode=preNode.pre;
}
}

class Entry{
Entry next;
Entry pre;
int number;

public Entry getNext() {
return next;
}

public void setNext(Entry next) {
this.next = next;
}

public Entry getPre() {
return pre;
}

public void setPre(Entry pre) {
this.pre = pre;
}

public int getNumber() {
return number;
}

public void setNumber(int number) {
this.number = number;
}

public Entry(int number) {
this.number = number;
}

public Entry(Entry next, Entry pre, int number) {
this.next = next;
this.pre = pre;
this.number = number;
}
}


}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM