劍指offer 鍊錶相關

2021-09-26 02:40:33 字數 2912 閱讀 1571

劍指offer面試常考手擼演算法題-鍊錶篇

1. 從頭到尾列印鍊錶

1

class

solution ;

8 vectorres;

9 stacks;

10while(head !=nullptr)

1115

while(!s.empty())

1620

return

res;21}

22//

可以直接插入vector中,翻轉vector

23//

24 vector printlistfromtailtohead(listnode*head) ;

28while

(head)

2933

reverse(res.begin(), res.end());

34return

res;35}

36 };

2. 鍊錶中倒數第k個節點

1

class

solution

15while(p->next !=nullptr)

1620

return

plisthead;21}

22 };

3. 翻轉鍊錶

1

class

solution

13while(p !=nullptr)

1419

return

q;20

}21 };

1

class

solution

19return

res;20}

21 };

4. 合併兩個排序鍊錶

1

class

solution

21else

2227}28

if(phead1 !=nullptr)

29 head->next =phead1;

30else

31 head->next =phead2;

32return res->next;33}

34//

遞迴版本

35 listnode* merge(listnode* phead1, listnode*phead2)

3648

else

4953

return

head;54}

55 };

5. 兩個鍊錶第乙個公共節點

9

class

solution );

24 phead1 = phead1->next;25}

26while(phead2 !=nullptr)

2733

return

nullptr;34}

35 };

6. 鍊錶中環的入口節點(快2滿1指標判斷成環,再走一圈計算環長,快慢指標找到入口)

判斷鍊錶是否成環(快慢指標解決)

1/*2

struct listnode 8};

9*/10class

solution

28 auto q =phead;

29//

後指標先走環長

30while(looplen--)

3134

//快慢一起走

35 p =phead;

36while(p !=q)

3741

return

p;42}43

//判斷是否成環,快指標走兩步-慢指標走一步,指標相遇必在環內

44 listnode* judgeloop(listnode*phead)

4561

return

nullptr;62}

63 };

7. 刪除鍊錶重複節點(重複保留乙個)

1

class

solution

19 pre =cur;

20 cur = cur->next;21}

22return

phead;23}

24 };

8. 刪除鍊錶重複節點(重複節點不保留)

1

class

solution

22else

2327}28

return first->next;29}

30 };

9. 判斷兩個鍊錶是否交叉

(同樣可使用乙個unordered_map來儲存乙個鍊錶中的節點指標,再遍歷另外乙個鍊錶逐個查詢)

1

bool findfirstcommonnode( listnode* phead1, listnode*phead2) );

8 phead1 = phead1->next;9}

10while(phead2 !=nullptr)

1117

return

false

;18 }

說明:以上前8個題**由牛客oj通過,第9個未測試。

the end.

劍指offer 鍊錶相關問題總結

首先統一鍊錶的資料結構為 struct listnode 題目一 從尾到頭列印鍊錶 輸入乙個鍊錶。從尾到頭列印鍊錶每乙個節點的值。分析 難點在於鍊錶僅僅有指向後繼的指標,沒有指向前驅的指標。轉換思路。結合棧後進先出的特點,能夠遍歷鍊錶,依次將資料元素存入棧中,然後再依次出棧,即為從尾到頭的順序。ve...

劍指offer 鍊錶相關 刪除value值節點

include include include struct listnode listnode createlink int a,int k else return head 從頭到尾列印列表 void printlink listnode phead coutelse else 書上的 void...

(4)劍指Offer之鍊錶相關程式設計題

題目描述 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點 問題分析 一句話概括 兩個指標乙個指標p1先開始跑,指標p1跑到k 1個節點後,另乙個節點p2開始跑,當p1跑到最後時,p2所指的指標就是倒數第k個節點。思想的簡單理解 前提假設 鍊錶的結點個數 長度 為n。規律一 要找到倒數第k個結點,需要向前走...