面試題15 鍊錶中倒數第K個節點

2021-07-13 08:25:28 字數 909 閱讀 2700

鍊錶的定義如下:

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步時,...