資料結構與演算法之美筆記梳理四 鍊錶(下)

2021-09-25 01:14:11 字數 4164 閱讀 9010

技巧⼀:理解指標或引⽤的含義

技巧三:利⽤哨兵簡化實現難度

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.鍊錶的三種形式 單鏈表 雙向鍊錶 迴圈鍊錶 簡介一下單鏈表 頭節點用於記錄基位址,有了它我們就可以遍歷整條鍊錶,而尾節點特殊地方不是指向下乙個節點,而是指向乙個空位址。鍊錶因為不是乙個連續的位址,所以不需要考慮連...