876. 鏈表的中間結點 - 力扣(LeetCode)
思路?
思路:首先最容易想到的思路是什么呢,就是先遍歷一遍鏈表,用一個值count來記錄鏈表的長度,然后我們運用除法,/2,結果是幾,就是第幾個是中間節點,但是這種方法其實是需要兩個for循環的。還有一個思路,就是我們的快慢指針方法,這里我們用快慢指針的方法。
?
易錯點?
?這里我覺得在聲明fast和slow時,容易出錯,還有fast&&fast->next時容易出錯,首先第一個出錯點我覺得在寫那個slow時可能會忘記加*,對于while循環判斷fast&&fast->next這里呢,這里可能會分不清用與還是或,這里我們想只要有一個條件不滿足就直接跳出循環,所以只要有一個為假就跳出循環,所以用與就是&&,如果用或(||)的話,就是得滿足兩個條件才能跳出循環,還有就是fast和fast->next不能互換位置,否則假如fast為NULL,那么怎么能取到fast->NULL呢。
代碼?
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode ListNode;
struct ListNode* middleNode(struct ListNode* head) {ListNode* fast,*slow;fast=slow=head;while(fast&&fast->next){slow=slow->next;fast=fast->next->next;}return slow;
}
?