首先,對於鍊錶來說,我們不能像陣列一樣直接訪問,所以我們想到要求倒數第k個節點首先要知道最後乙個節點。
然後從最後乙個節點往前數k個。
最後得到想要的值。
但是這是不對的,為什麼呢?因為題目給出的是單向鍊錶,只能從前往後找。
所以我們需要換一種思路。
定兩個指標。
都從鍊錶的頭開始走,乙個先走乙個後走,先走的比後走的快k步。
然後兩個人之後每次都走一步。
當先走的走到終點的時候。
那麼後走的所在的位置就是倒數第k個節點的位置了。
下面是**,這次使用stl庫中的list完成。
/***單向鍊錶求倒數的第k個節點的值 **/
#include
#include
#include
#include
#include
using
namespace
std;
//定義乙個鍊錶
listlinklist;
//列印鍊錶中的元素
void
print_list()
intmain()
cout
<<"
倒數第三個元素是:
"<<*iterator_b
}
單向鍊錶中倒數第k個值
本文參考書籍 劍指offer 作者何海濤 01 題目輸入乙個單向鍊錶,輸出該鍊錶中倒數第k個結點。如乙個鍊錶中有6個結點,1,2,3,4,5,6 這個鍊錶的倒數第三個節點是值為4的結點。鍊錶結構如下 02 解題 解法1 獲取鍊錶的第k個值,如果可以知道鍊錶長度n,那麼可以知道從0開始第n k的值是要...
求單向鍊錶中的倒數第K個節點2
題目描述 輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾節點是倒數第1個節點。例如乙個鍊錶有6個節點,從頭節點開始他們的值依次是1 2 3 4 5 6.這個鍊錶的倒數第3個節點值為4.解題思路 主要思路是借助兩個迭代器指向的位置,確定倒數第k個節點。第...
求鍊錶倒數第k個節點
1.初解 public static node findkthtotail node head,uint k behind head while ahead.next null return behind 上面的 存在3處魯棒性問題 1 輸入的head為空指標。由於 會試圖訪問空指標指向的記憶體,程...