假期結束,接著來吧!雙向鍊錶

2021-10-01 21:07:59 字數 1656 閱讀 5584

雙向鍊錶與單向鍊錶的比較

單向鍊錶查詢方向只能是乙個方向,雙向鍊錶的可以向前也可以向後

單向鍊錶是不可以自我刪除的,需要靠輔助節點,並且總要找到待刪除節點的前乙個結點,雙向鍊錶是可以自我刪除的

雙向鍊錶的尾部新增

思路分析

找到雙向鍊錶的最後節點,同單向鍊錶的遍歷方式

temp.next = new node

new node.pre = temp;

尾節點的後繼指標後指,新節點的前繼指標前指

**實現

我的**:

package linkedlist;

public

class

doublelinkedkist

}class

dll//在這裡注意,尾節點的判定,不是本身是空的

//而是看他的next是否為空,show方法輸出的時候可以直接判定本身是否為空

temp = temp.next;

} temp.next = hero;

hero.pre = temp;

}public

void

show()

hero temp = head.next;

while

(temp != null)}}

class

hero';

}public

hero

(int no, string name, string nickname)

}

雙向鍊錶的刪除

思路分析

自我刪除,無需找到待刪除結點的前乙個結點

直接找到待刪除結點

temp.pre.next = temp.next

temp.next.pre = temp.pre

**實現:

我的**:

public

intgetlength()

return size;

}public

void

delete

(int no)

int size =

getlength()

;if(no <=

0|| no > size)

boolean isflag =

false

;while

(true)if

(temp.no == no)

temp = temp.next;}if

(isflag)

else

}

修改:

if

(isflag)

else

如果刪除的是最後乙個節點,會出現空指標異常,所以應該加乙個判斷語句,判斷是否為最後乙個節點

if

(isflag)

else

}

總結

作為鍊錶本身就帶有的方法,我們在呼叫其本身的方法時,沒必要在傳入頭指標

鍊錶操作自身,作為已知元素,也是沒必要判定是否為空鍊錶的

**太過冗餘和麻煩

沒碼乙個**塊,想清楚每乙個**塊的要素,while迴圈語句,初始條件,迴圈體,迭代條件,終止條件,每一次都會漏

mysql 雙向鍊錶 雙向鍊錶

雙向鍊錶是鍊錶變型,相比於單鏈表導航或者是向前和向後的兩種方式。以下是重要的術語來理解雙向鍊錶的概念 link 鍊錶的每個鏈路儲存資料稱為乙個元素。linkedlist linkedlist包含連線鏈結到名為首先第乙個鏈結,並稱為最後的最後乙個鏈結 last 雙向鍊錶表示 按照如上圖中所示,以下是要...

雙向鍊錶(鍊錶)

雙向鍊錶 每個節點包含指向後繼節點的指標和指向前驅節點的指標。繼承關係圖 實體圖 duallinklist.h duallinklist 雙向鍊錶類模板 成員變數 node 節點實體 m header 頭節點 m length 鍊錶長度 m step 步進長度 m current 當前節點前乙個節點...

雙向鍊錶 3 反轉雙向鍊錶

雙向鍊錶的反轉過程,可以參考下面的例圖。a 原始雙向鍊錶 b 反轉後的雙向鍊錶 下面是乙個用於反轉雙向鍊錶的簡單方法。所需要做的事情就是交換每個節點的前向指標和後向指標,然後調整鍊錶的頭指標和尾指標。include struct node 對鍊錶進行反轉 void reverse node head...