技巧⼀:理解指標或引⽤的含義
技巧三:利⽤哨兵簡化實現難度
head指標會⼀直指向這個哨兵結點。我們也把這種有哨兵結點
的鍊錶叫帶頭鍊錶。相反,沒有哨兵結點的鍊錶就叫作不帶頭鍊錶
哨兵結點是不儲存資料的,因為哨兵結點⼀直存在,所以插⼊第⼀個結點和插⼊其他結點,刪除最後⼀個結點和刪除其他結點
技巧四:重點留意邊界條件處理
技巧五:舉例畫圖,輔助思考
技巧六:多寫多練,沒有捷徑
5個常⻅的鍊錶操作
package com.mys;
public
class
node
public t getdata()
public
void
setdata
(t data)
public node
getnext()
public
void
setnext
(node
next)
}
package com.mys;
/** * 單鏈表的插入、刪除、查詢資料
* 鍊錶中儲存的是int型別資料
*/public
class
singlylinkedlist
return p;
}public node findbyindex
(int index)
return p;
}//無頭結點
//表頭部插入
//這種操作將於輸入的順序相反,逆序
public
void
inserttohead
(int value)
public
void
inserttohead
(node newnode)
else
}//順序插入
//鍊錶尾部插入
public
void
inserttail
(int value)
else
newnode.next = q.next;
q.next = newnode;}}
public
void
insertafter
(node p,
int value)
public
void
insertafter
(node p, node newnode)
public
void
insertbefore
(node p,
int value)
public
void
insertbefore
(node p, node newnode)
node q = head;
while
(q != null && q.next != p)
if(q == null)
newnode.next = p;
q.next = newnode;
}public
void
deletebynode
(node p)
node q = head;
while
(q != null && q.next != p)
if(q == null)
q.next = q.next.next;
}public
void
deletebyvalue
(int value)
if(p == null)
return;if
(q == null)
else
// 可重複刪除指定value的**
/* if (head != null && head.data == value)
node pnode = head;
while (pnode != null)
pnode = pnode.next;}*/
}public
void
printall()
system.out.
println()
;}//判斷true or false
public
boolean
tfresult
(node left, node right)
else
} system.out.
println
("什麼結果");
if(l==null && r==null)
else
}// 判斷是否為回文
public
boolean
palindrome()
else
while
( q.next != null && q.next.next != null)
system.out.
println
("中間節點"
+ p.data)
; system.out.
println
("開始執行奇數節點的回文判斷");
node leftlink = null;
node rightlink = null;
if(q.next == null)
else
return
tfresult
(leftlink, rightlink);}
}//帶結點的鍊錶翻轉
public node inverselinklist_head
(node p)
// 返回左半部分的中點之前的那個節點
// 從此處開始同步像兩邊比較
return head;
}//無頭結點的鍊錶翻轉
public node inverselinklist
(node p)
r.next = pre;
// 返回左半部分的中點之前的那個節點
// 從此處開始同步像兩邊比較
return r;
}public
static node createnode
(int value)
public
static
class
node
public
intgetdata()
}public
static
void
main
(string[
]args)
;//int data = ;
//int data = ;
//int data = ;
//int data = ;
// int data = ;
int data=
;for
(int i =
0; i < data.length; i++
)// link.printall();
// node p = link.inverselinklist_head(link.head);
// while(p != null)
system.out.
println
("列印原始:");
link.
printall()
;if(link.
palindrome()
)else
}}
《資料結構與演算法之美》筆記 鍊錶
typedef struct node node 陣列和鍊錶都是線性表。陣列必須是連續空間,而鍊錶無所謂。鍊錶 單鏈表 迴圈鍊錶 雙向鍊錶 陣列 插入 刪除的時間複雜度是o n 隨機訪問的時間複雜度是o 1 鍊錶 插入 刪除的時間複雜度是o 1 隨機訪問的時間複雜端是o n 快取淘汰策略 先進先出策...
資料結構與演算法之美 鍊錶
如何優雅的寫出鍊錶 6大學習技巧 一 理解指標或引用的含義1.含義 將某個變數 物件 賦值給指標 引用 實際上就是就是將這個變數 物件 的位址賦值給指標 引用 2.示例 p next q 表示p節點的後繼指標儲存了q節點的記憶體位址。p next p next next 表示p節點的後繼指標儲存了p...
資料結構與演算法之美 鍊錶
1.如何實現lru快取淘汰演算法 答 回答這個問題之前,我們首先了解一下什麼是快取 2.鍊錶的三種形式 單鏈表 雙向鍊錶 迴圈鍊錶 簡介一下單鏈表 頭節點用於記錄基位址,有了它我們就可以遍歷整條鍊錶,而尾節點特殊地方不是指向下乙個節點,而是指向乙個空位址。鍊錶因為不是乙個連續的位址,所以不需要考慮連...