劍指offer解析(一) 線性表,鍊錶相關

2021-09-13 02:48:06 字數 1543 閱讀 1707

(1)線性表: 線性表中資料元素之間的關係是一對一的關係,即除了第乙個和最後乙個資料元素之外,其它資料元素都是首尾相接的。

線性表的邏輯結構簡單,便於實現和操作。

(2)基本特徵:

1.集合中必存在唯一的乙個「第一元素」;

2.集合中必存在唯一的乙個 「最後元素」 ;

3.除最後乙個元素之外,均有 唯一的後繼(後件);

4.除第乙個元素之外,均有 唯一的前驅(前件)

(1)陣列: 儲存空間連續

(2)單向鍊錶

(3)雙向鍊錶

(4)環形鍊錶

煉表處理核心:

(1) 鍊錶的節點遍歷方式

struct listnode

;

: 一般在題目中的鍊錶一般以指標的形式給出,所以我們訪問的方式是以 ->

鍊錶節點的

(2)鍊錶指標翻轉的方法

void

deletenode

(listnode* node)

// 刪除某個節點的方法,其實就是修改其中的指標即可

注意程式的魯棒性,鍊錶斷開等情況

class solution 

return preversehead;}}

;

輸入兩個鍊錶,找出它們的第乙個公共結點。

class solution 

return p1;}}

;

(取自劍指offer題)

思路:利用棧的filo的特性,實現從尾到到頭列印鍊錶

輸入乙個鍊錶,按煉錶值從尾到頭的順序返回乙個arraylist。

class solution 

while

(!sta.

empty()

)}};

時間複雜度o(n)

class solution 

while

(plist_ahead->next !=

null

)return plist_behind;}}

;

輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。

class solution 

else

phead1 = phead1->next;

}else

else

phead2 = phead2->next;}}

if(phead1 ==

null)if

(phead2 ==

null

)return result;}}

;

class solution 

else}}

;

劍指offer 鍊錶

單向鍊錶的結構定義 typedef int datatype struct listnode 問題1 往鍊錶的末尾新增乙個結點 給定頭結點,往末尾插入乙個結點 void insertnode listnode head,datatype key listnode p head while p nex...

劍指offer 鍊錶

鍊錶 鍊錶是一種動態資料結構 struct listnode 往鍊錶的末尾新增乙個節點的c 程式如下 void addtotail listnode phead,int value 注意第乙個引數phead是乙個指向指標的指標。當我們往乙個空鍊錶插入乙個結點時,else pnode m pnext ...

劍指offer 鍊錶

在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。思路1 遞迴版 class solution 找到當前節點與下乙個節點不重複的點,從不重複的點開始遞迴 return deleteduplication phead next else 思路2 非遞迴版 ...