查詢鍊錶的中間節點,只能遍歷一次陣列(C )詳細

2021-10-16 01:54:03 字數 929 閱讀 8966

方法及思想

因為要求只能遍歷一次鍊錶,那麼我們就可以邊遍歷邊查詢中間的節點。每遍歷一步,就找一次中間節點,然後移動只想中間節點的指標。此處借助鍊錶的長度來實現這個解法,我假設在鍊錶長度為偶數時,中間節點為length/2取下取整(參考二分法)

**

#include

using

namespace std;

struct list };

尾插建立鍊錶

list*

insert

(list* head,

int x)

list* t =

newlist

(x);

p->next = t;

return head;

}從頭列印鍊錶

void

pprint

(list* head)

else

return

pprint

(head-

>next);}

查詢鍊錶的中間節點,只能遍歷一次鍊錶

list*

find

(list* head)

else

for(

int i = now; i < mid; i++

) now = mid;

}return ans;

}int

main()

pprint

(head)

; list* mid=

find

(head)

; cout << mid-

>val;

return0;

}

執行結果

查詢單鏈表的中間節點,要求只能遍歷一次鍊錶

今天寫的函式是查詢單鏈表中的中間節點,但是要求只能遍歷一遍,如果不是這個條件來限制的話,可以先將鍊錶遍歷一遍,然後通過計數器來計算鍊錶中的資料個數然後通過迴圈來找中間的結點,但是要求只能遍歷一遍也就是說你在知道這個鍊錶中有多少個資料的同時就要知道他的中間資料是哪乙個。這樣的話就不能通過剛剛所說的方法...

鍊錶3 一次遍歷找到中間節點

一次遍歷就能夠找到中間節點,怎樣實現的呢?讓我們直奔主題 思想 首先經過兩次遍歷可以找到中間的節點,這個是毋庸置疑的,第一次檢視個數,第二次直接找出來了。但是我今天要記錄的就是怎樣通過一次的遍歷,就把中間的節點給找到!其實,我們可以這樣 定義兩個指標變數,當然是相應的結構體型別的啊,在判斷多餘兩個節...

查詢鍊錶中間節點

問題 鍊錶長度未知,如何查詢中間節點 分析 鍊錶中間節點受鍊錶長度影響,奇數長度如abc則中間節點為b,偶數長度如abcd則中間節點為bc。解決方法 使用兩個指標ptr1 ptr2 head,同時遍歷鍊錶,ptr1步長為1,ptr2步長為2.當ptr2到達鍊錶尾時,ptr1即為中間節點 如果鍊錶長為...