尋找鍊錶中間節點

2021-07-25 22:40:54 字數 1963 閱讀 9953

#include

#include

#include

#include

typedef

intdatatype;  

typedef

struct

linknode  

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

typedef

struct

linklist  

linklist ,*plinklist;//鍊錶

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

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

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

//演算法**實現:

[cpp]view plain

copy

plinknode  findmidnode(plinklist plist)  

return

slow;  

}  

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

[cpp]view plain

copy

#include

#include

#include

#include

typedef

intdatatype;  

typedef

struct

linknode  

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

typedef

struct

linklist  

linklist ,*plinklist;//鍊錶

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

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

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

//演算法**實現:

[cpp]view plain

copy

plinknode  findmidnode(plinklist plist)  

return

slow;  

}  

尋找鍊錶中間節點

cpp view plain copy include include include include typedef intdatatype typedef struct linknode linknode,plinknode 結點結構體 typedef struct linklist linkl...

利用快慢指標尋找鍊錶中間節點

876.鍊錶的中間結點 這道題要求我們找到鍊錶中的中間位置,首先想到第一種方法,使用兩個指標,乙個從頭遍歷到尾部確定長度,乙個從頭遍歷到相應位置。那麼有沒有一遍遍歷就能解決的?那麼我們想到快慢指標,因為快慢指標往往可以做到一遍遍歷,在慢指標處找到答案 做法 慢指標走一步,快指標走兩步。這樣快指標到末...

鍊錶中間節點

題目 給定乙個帶有頭結點 head 的非空單鏈表,返回鍊錶的中間結點。如果有兩個中間結點,則返回第二個中間結點。示例 1 輸入 1,2,3,4,5 輸出 此列表中的結點 3 序列化形式 3,4,5 返回的結點值為 3 測評系統對該結點序列化表述是 3,4,5 注意,我們返回了乙個 listnode ...