尋找中間節點

2021-09-12 00:03:17 字數 1088 閱讀 9161

題目:尋找鍊錶的中間節點,如果鍊錶個數為奇數 則中間結點就是最中間的結點,如果為偶數,中間節點是中間兩個節點後面的那個結點;

​ 遍歷列表計算鍊錶長度

​ 找到鍊錶的中間位置索引

​ 遍歷到鍊錶,至到中間位置,返回中間位置

public listnode middlenode

(listnode head)

size=size/2+

1;//2.取出:

listnode temp=head;

for(

int i=

0;i1;i++

)return temp;

}

快慢指標)兩個節點,第乙個節點一次走一步,第二個節點,一次走兩步,(快的走到了終點,慢的走到中間節點):

快慢指標

public listnode middlenode

(listnode head)

listnode dummyhead=

newlistnode(-

1); dummyhead.next=head;

listnode fast=head;

// listnode slow=head;

while

(fast.next!= null)

else

}return slow;

}

分析

while

(fast.next!= null)

這個迴圈條件是因為,fast一次要向後走兩步,不判斷的話有可能產生 nullpointerexception異常

if

(fast.next.next != null)

先判斷fast移動兩步後是否為空,如果為不為空,fast向後走兩步,slow向後走一步(如果是奇數,最後一步一定進入的是這個分支)

else

如果是偶數,一定是進入的是這個分支

尋找鍊錶中間節點

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

尋找鍊錶中間節點

include include include include typedef intdatatype typedef struct linknode linknode,plinknode 結點結構體 typedef struct linklist linklist plinklist 鍊錶 函式原...

尋找單鏈表的中間節點

思路 1 首先求解單鏈表的長度length,然後遍歷 length 2 的距離即可查到單鏈表的中間節點,但一般此種方法需要遍歷兩次鍊錶,第一次遍歷求解單鏈表的長度,第二次遍歷根據索引獲取中間節點。2 如果是雙向鍊錶,可以首尾並行,利用兩個指標乙個從頭到尾,乙個從尾到頭,當兩個指標相遇的時候,就找到中...