面試題13 鍊錶中倒數第k個結點

2021-12-29 23:49:36 字數 1572 閱讀 5630

思路:設定兩個指標,乙個慢指標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* ar**)

#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* ar**)

面試題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 當第乙個 走在前面的 指標到達鍊錶的尾結點時,第二個指標 走在後面的 指...