LeetCode 876-Middle of the Linked List
题干:
给定一个链表,要求找到它的中点(偶数个节点时,是找靠后的那个)。
Input: head = [1,2,3,4,5]
Output: [3,4,5]
-----------------
Input: head = [1,2,3,4,5,6]
Output: [4,5,6]
解:
让两个指针slow和fast指向链表头节点。每当慢指针slow前进一步时,快指针fast前进两步;这样当fast走到链表末尾时,slow就指向了链表中点。
注意:
对于快指针fast,奇数个是走到链表末尾,偶数个是走到NULL;
偶数个时,中点有两个,慢指针slow指向的是靠后的那个节点;
如果想要在偶数个时慢指针slow指向靠前的那个节点,只需给快慢指针都加上dummy node,方法依旧。
ListNode* middleNode(ListNode* head) {
ListNode* fast = head, *slow = head;
while(fast&&fast->next){ //慢指针slow走一步,快指针fast走两步
fast = fast->next->next;
slow = slow->next;
}
return slow;
}
该问题通过使用两个指针,一个慢指针每次移动一步,一个快指针每次移动两步,来找到链表的中点。当快指针到达链表末尾时,慢指针位于链表的中间。这种方法适用于链表节点数为偶数或奇数的情况。
&spm=1001.2101.3001.5002&articleId=128758237&d=1&t=3&u=0dc34c1a62984e7bbcaf515cb4da3249)
453

被折叠的 条评论
为什么被折叠?



