面試遇到乙個題目,寫乙個雙向鍊錶,包括新增,刪除,查詢和遍歷。當時寫了一塌糊塗,後來自己都覺得想笑,雙向寫著寫著被我寫成了單向不像單向,雙向不像雙向了,真是不倫不類。之後 我把這個問題整理了一下,希望對以後的小夥伴 有幫助。如果有錯誤,希望指出 以免誤人。謝謝!
public class linknode
public linknode prev = null;
public linknode next = null;
//隨便定義的節點資料
public int data = 0;
public delegate void dataeach(linknode data);
public linknode(int obj)
this.prev = this;
this.next = this;
this.data = obj;
public void add(linknode node)
#region 這是加在當前節點後面
var nextnode = this.next;//當前鍊錶 當前節點的下乙個節點
var addlastnode = node.prev;//新增的鍊錶的最後乙個節點
//當前鍊錶 當前節點的下乙個節點 改為新增的節點
this.next = node;
node.prev = this;
//新增列表的最後乙個節點的 下乙個節點改為當前鍊錶的當前節點的下一節點
addlastnode.next = nextnode;
nextnode.prev = addlastnode;
#endregion
public linknode remove(linknode node)
linknode removenode = findnode(node);
if (removenode != null)
//不是單節點雙向鍊錶
if (removenode.next != removenode.prev)
removenode.prev.next = removenode.next;
removenode.next.prev = removenode.prev;
linknode returnnode = this;
if (removenode == this)
returnnode = this.prev;
gc.collect();
return returnnode;
else
return this;
else
return this;
public linknode findnode(linknode data)
if (this == data) return this;
linknode currentdata = this.next;
while (currentdata != this)
if (currentdata == data) return currentdata;
else currentdata = currentdata.next;
return null;
public void each(dataeach ea)
console.writeline(this.data);
linknode currentdata = this.next;
while (currentdata != this)
if (ea != null)
ea(currentdata);
currentdata = currentdata.next;
測試時main方法如下:
static void main(string args)
linknode node1= new linknode(1);
linknode node2= new linknode(2);
linknode node10= new linknode(10);
linknode node11= new linknode(11);
node1.add(node2);//新增節點
node1.each(u => ); //遍歷
node10.add(node11);
node1.add(node10);//新增乙個雙向鍊錶
node1.each(u => ); //遍歷
linknode findnode= node1.findnode(node2); //查詢節點
if(findnode!=null)
console.writeline(findnode.data);
node1.remove(node2);//刪除
node1.each(u=> ); //遍歷
console.readline();
mysql 雙向鍊錶 雙向鍊錶
雙向鍊錶是鍊錶變型,相比於單鏈表導航或者是向前和向後的兩種方式。以下是重要的術語來理解雙向鍊錶的概念 link 鍊錶的每個鏈路儲存資料稱為乙個元素。linkedlist linkedlist包含連線鏈結到名為首先第乙個鏈結,並稱為最後的最後乙個鏈結 last 雙向鍊錶表示 按照如上圖中所示,以下是要...
mysql的引雙向鍊錶 雙向鍊錶
public classdoublelinkedlist else 新增至鍊錶尾 paramnode public voidaddlast doublenode node else 按照某屬性的順序新增 paramnode public voidaddbyorder doublenode node ...
雙向鍊錶 3 反轉雙向鍊錶
雙向鍊錶的反轉過程,可以參考下面的例圖。a 原始雙向鍊錶 b 反轉後的雙向鍊錶 下面是乙個用於反轉雙向鍊錶的簡單方法。所需要做的事情就是交換每個節點的前向指標和後向指標,然後調整鍊錶的頭指標和尾指標。include struct node 對鍊錶進行反轉 void reverse node head...