思路:設定兩個指標,乙個慢指標pslow,乙個快指標pfast,快指標先走k-1步,接著兩個指標同時走,當快指標到達鍊錶的尾部,慢指標恰好指向倒數第k個結點。
特殊情況:當k大於鍊錶長度,則返回頭結點。
**:
#include "stdafx.h"
#include using namespace std;
struct listnode
;listnode *findkthtotail(listnode *phead, int k)
listnode *pslow = phead;
listnode *pfast = phead;
int i = 1;
while (i < k)
i++;
} if (pfast != null) }
return pslow;
}//建立乙個鍊錶,輸入從頭到尾結點的值,輸入-1表示結束
void createlist(listnode *& phead)
else
plistnode->m_pnext = null;
pcurlastnode->m_pnext = plistnode;
pcurlastnode = plistnode;
} }}
//從頭到尾列印鍊錶
void printlist(listnode *&phead)
cout << endl;
} else }
int _tmain(int argc, _tchar* argv)
面試題13 鍊錶中倒數第k個結點
思路 設定兩個指標,乙個慢指標pslow,乙個快指標pfast,快指標先走k 1步,接著兩個指標同時走,當快指標到達鍊錶的尾部,慢指標恰好指向倒數第k個結點。特殊情況 當k大於鍊錶長度,則返回頭結點。include stdafx.h include using namespace std struc...
面試題15 鍊錶中倒數第K個結點
題目 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾結點是倒數第1個結點。例如乙個鍊錶有6個結點,從頭結點開始它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個結點是值為4的結點。鍊錶的節點定義如下,這裡使用的是c 來定義 public cla...
面試題15 鍊錶中倒數第k個結點
為了實現只遍歷鍊錶一次就能找到倒數第k 個結點,我們可以定義兩 個指標。第乙個指標從鍊錶的頭指標開始遍歷向前走k 1步,第二個指標保持不動 從第k 步開始,第二個指標也開始從鍊錶的頭指標開始遍歷。由於兩個指標的距離保持在k 1 當第乙個 走在前面的 指標到達鍊錶的尾結點時,第二個指標 走在後面的 指...