mysql 雙向鍊錶 面試 雙向鍊錶

2021-10-17 22:45:03 字數 2417 閱讀 7429

面試遇到乙個題目,寫乙個雙向鍊錶,包括新增,刪除,查詢和遍歷。當時寫了一塌糊塗,後來自己都覺得想笑,雙向寫著寫著被我寫成了單向不像單向,雙向不像雙向了,真是不倫不類。之後 我把這個問題整理了一下,希望對以後的小夥伴 有幫助。如果有錯誤,希望指出 以免誤人。謝謝!

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...