劍值offer之相關鍊錶問題

2021-10-04 18:52:40 字數 2522 閱讀 2336

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

題目:輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。

思路:定義兩個指標,先讓乙個指標走到k-1的位置,讓後兩個指標同時走到最後

注意: 1.如果輸入的指標為空指標 需判空

2.如果鍊錶的節點數少於k,由於for迴圈中煉表會向前走k-1步

3.輸入的引數k為0

/*

struct listnode

};*/

class solution

//讓第二個指標指向頭節點

pbehind=plisthead;

//這是兩個指標相距k-1 然後一起往後走

while

(pahead->next!=nullptr)

return pbehind;}}

;

24.反轉鍊錶

題目:輸入乙個鍊錶,反轉鍊錶後,輸出新鍊錶的表頭。

思路:定義3個指標 ,分別指向當前遍歷到的節點,以及它的前乙個節點和後乙個節點,當當前節點的下乙個等於空時,自然就到了尾節點(反轉後的頭節點)

/*

struct listnode

};*/

class solution

return preversedhead;}}

;

25.合併鍊錶

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

思路:首先比較兩個鍊錶的頭指標,值小的先插入鍊錶

注意:**的魯棒性 程式一旦輸入空煉表就會崩潰 因此需要進行判空處理

/*

struct listnode

};*/

class solution

if(phead1->val>phead2->val)

if(phead1->val==phead2->val)

return pmergehead;}}

;

23.鍊錶中環的入口節點

題目:給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口節點,否則,輸出null。

思路:1.想求入口節點 就得先求環中的節點數目 要求環中的節點數目就得先定義兩個快慢指標 讓他倆相遇求出相遇節點

具體步驟:1.定義乙個快指標一次走兩步,定義乙個慢指標一次走一步 直到它倆相遇求出相遇的節點

2.求環的節點數目:在相遇的節點位置定義乙個新的節點,讓它從它的下乙個開始走直到碰到它自己 這時用乙個變數記錄次數,這個次數就是節點的數目

3.求環的入口節點:定義兩個指標指向頭節點,讓乙個指標先走到頭節點加k(環中的節點數目)的位置,然後讓這兩個指標同時走直到相遇,相遇點就是環的入口點。

注意:**的魯棒性

/*

struct listnode

};*/

class solution

//要求環的入口,先讓pnode1移動nodesinloop(節點的數目)步,

//然後讓兩個指標一起走,再次相遇點就是入口

//先移動pnode1,次數為環中節點的數目

pnode1=phead;

for(

int i=

0;i++i)

pnode1=pnode1->next;

//在移動pnodde1和pnode2

listnode *pnode2=phead;

while

(pnode1!=pnode2)

return pnode1;

}//存在環的前提下找到一快一慢兩個指標相遇的節點

listnode*

meetingnode

(listnode*phead)

return nullptr;}}

;

24.鍊錶中刪除重複的節點

題目:在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。 例如,鍊錶1->2->3->3->4->4->5 處理後為 1->2->5

思路:首先遍歷整個列表,如果找到當前節點與下乙個節點相同,就是相同元素 把它倆刪除

具體步驟:1.首先定義乙個當前節點指標和乙個當前節點的前乙個節點的指標

2.遍歷所有節點並定義乙個bool變數來判斷節點是否要刪除

3.如果不刪除 則繼續往下走

4.如果刪除,那就刪除

/*

struct listnode

};*/

class solution

//如果是那就刪除

else

if(pprenode==nullptr)

*phead=pnext;

else

pprenode->next=pnext;

pnode=pnext;}}

}};

《劍指offer 之鍊錶題目

這幾天在看 劍指offer 寫的很好,跟july的各有千秋,更加注重歸納總結,筆試面試臨時抱佛腳,決定要啃下這其中的46道題目。ok,把每道題目自己實現,相同的歸成一類。這次把所有的與list相關的題目列出來。思路 從尾到頭列印list的話,考慮用stack先把各節點儲存起來,遍歷完以後再將stac...

劍指offer之反轉鍊錶

題目介紹 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。題目比較簡短,所以直接上 public class listnode public class solution listnode curnode head.next head.next null listnode resultnode hea...

劍指Offer之反轉鍊錶

題目描述 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。hint 請務必使用鍊錶 輸入 輸入可能包含多個測試樣例,輸入以eof結束。對於每個測試案例,輸入的第一行為乙個整數n 0 n 1000 代表將要輸入的鍊錶的個數。輸入的第二行包含n個整數t 0 t 1000000 代表鍊錶元素。輸出 對應每個...