给你单链表的头结点 head
,请你找出并返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
示例 1:
输入:head = [1,2,3,4,5] 输出:[3,4,5] 解释:链表只有一个中间结点,
提示:
- 链表的结点数范围是
[1, 100]
1 <= Node.val <= 100
这道题的思路之前在面试金典题2.3就详细讲过,这里就不再过多赘述,直接贴出源码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* middleNode(ListNode* head) {
if(head->next==nullptr||head==nullptr){
return head;
}
ListNode* l1=head;
ListNode* l2=head;
while(l2!=nullptr&&l2->next!=nullptr){
l1=l1->next;
l2=l2->next->next;
}
return l1;
}
};