劍指offer(三):從尾到頭列印鍊錶
輸入乙個鍊錶,按鍊錶從尾到頭的順序返回乙個arraylist。
劍指offer(十四):鍊錶中倒數第k個結點/*思路:遍歷一遍鍊錶,把鍊錶的值儲存到陣列中,逆序陣列。*/
class
solution
return vector<
int>
(res.
rbegin()
, res.
rend()
);}}
;
輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。
劍指offer(十五):反轉鍊錶/*思路:遍歷一遍鍊錶,求出鍊錶的長度,求倒數第k個結點,即正數第n-k+1個結點,從頭結點走n-k步,找到該節點*/
class
solution
};
輸入乙個鍊錶,反轉鍊錶後,輸出新鍊錶的表頭。
方法一:迭代版本:
方法二:遞迴版本:/*思路:用乙個額外變數記錄當前節點的前驅結點,遍歷一遍鍊錶,鍊錶不空時,當前節點的下乙個點指向前驅,前驅結點後移,當前點往後移(需要記錄當前點的下乙個點),最後前驅結點即為反轉鍊錶的頭結點。*/
class
solution
return pre;}}
;
劍指offer(十六):合併兩個排序的鍊錶/*思路:1->2->3->4->5->null 遞迴後,5->4->3->2->null,再把2指向1,1指向空,遞迴後的尾指標即為新鍊錶的表頭*/
class
solution
};
輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。
劍指offer(二十五):複雜鍊錶的複製/*思路:二路歸併演算法,每次找到剩餘所有數的最小值,放到新鍊錶的後邊*/
class
solution
if(phead1) tail-
>next = phead1;
if(phead2) tail-
>next = phead2;
return dummy-
>next;}}
;
請實現乙個函式可以複製乙個複雜鍊錶。在複雜鍊錶中,每個結點除了有乙個指標指向下乙個結點外,還有乙個額外的指標指向鍊錶中的任意結點或者null。
劍指offer(三十六):兩個鍊錶的第乙個公共結點/*思路:1.在每個結點的後邊插入乙個結點;2.遍歷一遍鍊錶,把複製結點的random指標賦值;3.把複製的結點接到新的煉表裡。*/
class
solution
// 遍歷一遍鍊錶,把random指標賦值
for(
auto p = phead; p; p = p-
>next-
>next)
// 把複製結點接到新的鍊錶
auto dummy =
newrandomlistnode(-
1);auto cur = dummy;
for(
auto p = phead; p; p = p-
>next)
return dummy-
>next;}}
;
輸入兩個鍊錶,找出它們的第乙個公共結點。(注意因為傳入資料是鍊錶,所以錯誤測試資料的提示是用其他方式顯示的,保證傳入資料是正確的)
劍指offer(五十五):鍊錶中環的入口結點/*思路:兩個指標p和q分別指向兩個鍊錶的表頭,p和q同時每步往後移,若p先走到空節點,再接著從第二個煉表頭開始走;若q先走到空節點,再接著從第乙個煉表頭開始走,當p和q相遇時,一定走到第乙個公共結點(相交)或者空結點(不相交)*/
class
solution
return p;}}
;
給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。
劍指offer(五十六):刪除鍊錶中重複的結點/*思路:定義快慢指標,快指標每次走兩步,慢指標每次走一步,無環,返回空,有環,在第一次相遇時,慢指標退回表頭,此時,慢指標和快指標同時一起走,當兩個指標相遇時,即為環的入口結點*/
// 注:c++中,return null、nullptr、0是一樣的
class
solution
return i;
// 第二次相遇一定是環的入口結點}}
return0;
// 鍊錶為空,無環}}
;
在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。 例如,鍊錶1->2->3->3->4->4->5 處理後為 1->2->5
完整程式:/*思路:遍歷煉表裡的值,存放在陣列裡,建立乙個新的鍊錶,鍊錶值為陣列裡次數為1的值*/
class
solution
}return dummy-
>next;}}
;
#include
using
namespace std;
struct listnode};
listnode*
reverse
(listnode *head)
return pre;
}int
main()
劍指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 非遞迴版 ...