如下是乙個帶頭結點的單鏈表結構
typedef struct node
node;
typedef struct linklist
linklist;
假設單鏈表中有n個元素,尋找倒數第k個元素,也就是尋找單鏈表中正數的第n-k個元素,但是這個n是未知的。首先我們定義乙個結點的結構體指標*p
讓其指向頭結點的下乙個元素,再使其在1-k迴圈中不斷指向下乙個元素。然後定義另乙個結點指標*q
,在下乙個迴圈中,讓他們同時不斷指向下乙個元素,直至*p
的下乙個元素為空。
第乙個指標在1-k中跑,停止時停留在了第k個元素,那麼,單鏈表剩下的元素便是n-k個,此時再利用第二個指標從頭開始跑,讓第乙個指標也同時跑,最後停止的時候,第二個指標正好指向第n-k個元素。
其函式**如下:
node searchllist(linklist *l, int k)
while (p->next != null)
return *q;
}
單鏈表輸出倒數第k個元素
這個演算法已經有不少人寫過了,但是為了考研後期複習還是在此記錄一下自己的心得。方法有如下幾種 1 遍歷單鏈表兩次,第一次獲取鍊錶總長度,第二次尋找倒數第k個元素就很簡單了。但是該方法需要遍歷兩次鍊錶。2 遍歷單鏈表並記錄長度,將每個元素存入順序表中,然後通過下標獲取倒數第k個元素。該方法只需遍歷一次...
尋找單鏈表中倒數第k個結點
題目描述 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾結點是倒數第1個結點。例如乙個鍊錶有6個結點,從頭結點開始它們的值依次是1,2,3,4,5,6.這個鍊錶的倒數第3個結點是值為4的結點。思路分析 為了得到倒數第k個結點,很自然的想法是先走到鍊錶的...
1 5尋找倒數第k個元素
方法一 將單鏈表逆置,變換成尋找正數第k個元素 方法二 快慢指標法,快指標比慢指標快k個節點,當快指標到達尾節點時,慢指標為倒數第k個節點 方法三 順序遍歷兩次鍊錶法,第一次遍歷求出鍊錶長度n,將尋找倒數第k個元素轉換成尋找正數第n k個元素 實現方法二 coding utf 8 author 圖南...