題目:輸入k和鍊錶的頭結點,迴圈右移鍊錶的後k個結點。
for example:
given1->2->3->4->5->nulland
k=2,
return4->5->1->2->3->null.
思路:1.首先要找鍊錶的倒數第k個結點;
2.因迴圈右移的k個結點仍是按原來順序排列,可考慮用乙個先進先出的容器
即佇列將
後k個結點
儲存,依次連線在鍊錶首處;
3.但此解法空間複雜度為o(k);
4.將鍊錶首尾相接成環,然後在第k個結點前的結點處斷開即可;
因leetcode上測試用例中的k有大於length of list 的情況,故要先遍歷一遍然後使k=k%(length of list),
時間複雜度仍為o(n).
**如下:
/*** definition for singly-linked list.
* public class listnode
* }*/public class solution
n=n%count;
if(0 == n)
return head;
listnode first=head;
listnode second=head;
//先找到倒數第n個結點;
int num=1;
while(num
帶頭結點迴圈鍊錶
上乙個說的是單鏈表,其實迴圈鍊錶跟單鏈表類似,單鏈表最後乙個節點 p 的next域為null即p next null而迴圈鍊錶 plist 的則為頭結點的位址,即p next plist。其餘的基本操作和單鏈表幾乎一樣,僅僅是單鏈表迴圈結束條件為 null,而迴圈鍊錶是 plist。基本操作為 初始...
鍊錶2 鍊錶中倒數第k個結點
題目 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。k從1開始 思路 所謂輸入乙個鍊錶是指輸入乙個頭結點這個輸入的結點必然是含有next指標的物件,於是之後的多個結點相互連線形成乙個鍊錶。倒數第k個結點,也就正數第k n 1個結點,只需要遍歷鍊錶,返回第k n 1個結點即可 但是此時由於n是不知道的,為...
鍊錶 帶頭結點的雙向迴圈鍊錶
還需改進 creat node這個函式應有返回型別,來判斷新建結點是否成功,不然主函式中不管成不成功都會訪問該節點成員。改了這個函式,在主函式中create node後要判斷是否成功,不成功就提示並退出函式,退出前別忘了還要釋放鍊錶!同時create link這個函式中也要判斷head是否申請成功,...