查詢單鏈表的第k個結點

2021-06-19 12:26:21 字數 796 閱讀 5405



題目:輸入乙個單向鍊錶,輸出該鍊錶中倒數第

k個結點。鍊錶的倒數第

0個結點為鍊錶的尾指標。鍊錶結點定義如下:

struct

listnode;

解析:方案一:可以對單鏈表來個逆置,然後再取逆置後的單鏈表的第k個元素。但是這樣,在逆置的過程中涉及到大量的插入和刪除的工作,實為不佳的方案。

方案二:可以先求出鍊錶的長度,然後求第n-k-1個結點即可。但是這需要遍歷鍊錶兩遍,對於長度很大的鍊錶來說,不是乙個很好的方法。

方案三:尋求只需遍歷鍊錶一遍的方法。維持兩個指標p和q,p指標遍歷鍊錶,到第k-1個結點時,q開始從第1個結點開始與p一起前移,直至p指向了尾結點,那麼q便指向了倒數第k個結點。

// 8_返回單鏈表倒數第k個結點.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include using namespace std;

typedef struct node

node;

node *head = null;

void createlist()

}node * getknode(int k)

while(first->next!=null)

return second;

}void printlist()

}int _tmain(int argc, _tchar* argv)

{ createlist();

printlist();

cout<<"倒數第5個結點的值:"

查詢單鏈表中的倒數第 k 個結點

思路 1.編寫乙個方法,接收head節點,同時接收乙個index 2.index表示是倒數第index個節點 3.先把鍊錶從頭到尾遍歷,得到鍊錶的總長度getlength 4.得到size後,我們從鍊錶的第乙個開始遍歷 size index個 5.如果找到了返回該節點,否則返回null public...

刪除單鏈表倒數第k個結點

在資料結構這一方面,鍊錶這塊容易搞混的是它的指標。下面的演算法為刪除單鏈表倒數第k個結點,所有的步驟解析都在 裡說明了。刪除單鏈表的倒數第 k個結點.結點定義 classnode public classremotelastedkthnode node node head 遍歷一遍鍊錶,得到 k 最...

刪除單鏈表的倒數第k個結點

策略 直接遍歷總數為len,再次遍歷第len k 1個就是答案,但是這樣遍歷了o n k 個,可以在o在更短的時間內找到 圖示 參考 include using namespace std typedef struct listnode listnode void createlist listno...