單鏈表操作之查詢中間結點

2021-07-13 07:03:07 字數 1021 閱讀 1472

//查詢鍊錶的中間結點;

//自定義的結點結構體和頭指標結構體:

#include#include#include#includetypedef int datatype;

typedef struct linknode

linknode,*plinknode;//結點結構體

typedef struct linklist

linklist ,*plinklist;//鍊錶

//函式原型:plinknode  findmidnode(plinklist plist);

/* 思路分析:要找的鍊錶的中間結點,我在這裡的解法用到的是快慢指標;定義兩個指標,都指向鍊錶的第乙個成員,然後快的指標每次走兩步,慢的指標每次走一步,當快指標指向的next為null即鍊錶結點為奇數個的時候,或者,快指標快指標自身為空的時候停下,即鍊錶元素為偶數個,此時的慢指標走了s步,則快指標走了2s步,則此時 慢指標所指向的結點為中間節點;

//這道題比較簡單,理解起來也容易,但是關於快慢指標的應用才是重點,後續的文章會講到鍊錶的帶環問題,會對快慢指標進行再次的應用,就比較難理解了!

//演算法**實現:

plinknode  findmidnode(plinklist plist)

return slow;

}

尋找單鏈表的中間結點

如何尋找單鏈表的中間結點?這裡介紹兩種方法。該方法的思路為 1 先求解單鏈表的長度 length 2 然後遍歷 length 2 的距離即可查詢到單鏈表的中間結點。具體實現 public node findmidele node head return tmp 該方法的缺點 需要遍歷兩次鍊錶,即第一...

查詢單鏈表中間元素

查詢單鏈表中間元素 include using namespace std struct linknode class linklist linklist void insertvalue int nvalue void reverse void reverse2 linknode findlast...

快速尋找單鏈表中間元素結點

忘記什麼時候做的筆試題了。記憶力差沒辦法。一看到這倒題目,下意識的想到的解決方案便是首先迴圈遍歷鍊錶獲得鍊錶長度len,然後再次迴圈遍歷鍊錶查詢len 2處的中間節點。在這種情況下,其時間複雜度由兩次迴圈決定 o l l 2 o 3l 2 儘管這種思路也能解決問題,但也許存在更好的方法。上次我們談到...