题目
菜鸟解答 – 想到了 快慢指针 2倍速
struct ListNode* middleNode(struct ListNode* head){
struct ListNode *quick = head;
struct ListNode *slow = head;
if (NULL == head || NULL == head->next)
return head;
while (quick != NULL) {
quick = quick->next;
if (NULL == quick) {
return slow;
}
quick = quick->next;
if (NULL == quick) {
return slow->next;
}
slow = slow->next;
}
return NULL;
}
但是看完评论区官方解答,发现逻辑写复杂了…ORZ 偶数的时候quick还是可以再加第二次的变为null 这样其实是归一的
struct ListNode* middleNode(struct ListNode* head){
struct ListNode *quick = head;
struct ListNode *slow = head;
if (NULL == head || NULL == head->next)
return head;
while (quick != NULL && quick->next != NULL) {
quick = quick->next;
quick = quick->next;
slow = slow->next;
}
return slow;
}
ps: && 的判断 在实际执行的时候 是否一定是从左开始的… 从右就会越界的