这本身就是一道leetcode题目,但是我在做其他题的时候遇到了如何求链表中点的问题,于是将该方法当作一个模板记录一下:
1、存在中点时返回中点,如果有两个中间结点,则返回第2个中间结点。
例如:1,2,3,4 存在两个中点: 2 和 3, 则返回3所在节点。
class Solution {
public:
ListNode* middleNode(ListNode* head) {
/*
快慢指针
偶数: slow 返回 中间的右边
奇数:slow 返回 中点节点的位置
*/
ListNode* slow = head, *fast = head;
while(fast and fast->next){
slow = slow->next;
fast = fast->next->next;
}
return slow;
}
};
存在中点时返回中点,如果有两个中间结点,则返回第1个中间结点。
例如:1,2,3,4 存在两个中点: 2 和 3, 则返回2所在节点。
class Solution {
public:
ListNode* middleNode(ListNode* head) {
/*
快慢指针
偶数: slow 返回 中间的左边
奇数:slow 返回 中点节点的位置
*/
if(head == NULL) return head;
ListNode* slow = head, *fast = head->next;
while(fast and fast->next){
slow = slow->next;
fast = fast->next->next;
}
return slow;
}
};