鍊錶的定義如下:
struct listnode有三種方法:遞迴法,自定義棧法和前後指標法。};
**如下:
listnode* _findkthtotail(listnode* head,int& k)else
if(k==1)
else if(k>1)
k--;
}listnode* findkthtotail(listnode* head,int k)throw(lististooshort)
listnode* findkthtotail(listnode* head,int k)throw(lististooshort)while(--k!=0 && !s.empty())
if(k==0)
return s.top();
else
throw lististooshort();
}
listnode* findkthtotail(listnode* head,int k)throw(lististooshort)這三種方法的優缺點如下:if(k>0)
else
}return last;
}
時間複雜度
空間複雜度
是否最優
遞迴法o(n)
o(n)
否自定義棧法o(n)
o(n)
否前後指標法o(n)
o(1)是
因此,最好的方法是最後一種。
以上
完整**及測試用例在github上:點我前往
面試題15 鍊錶中倒數第k個節點
題目 輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。從1開始計數,如鍊表有1,2,3,4,5,6.倒數第三個節點是值為4的節點。可以採用兩個指標,思路比較清晰,但是就是一些邊界條件很難考慮全,比如k超出了鍊錶的長度。struct listnode class solution if fast null ...
面試題22 鍊錶中倒數第k個節點
假如單鏈表有n個節點,倒數第k個節點,即為n k 1 利用雙指標進行判斷,前指標走到k 1的位置,即開頭的k 1位置,然後讓後指標跟前指標一起走 當前指標到達尾部的時候,後指標剛好到達倒數第k個節點 include struct listnode 假如單鏈表有n個節點,倒數第k個節點,即為n k 1...
面試題22 鍊錶中倒數第K個節點
面試題22 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。definition for singly linked list.struct listnode class solution listnode phead head listnode pbehind nullptr 前面的指標先走k 1步時,...