该题目选自力扣。
解题思路:设置slow,fast两个结构体指针变量,slow每往后挪动一个节点,fast往后挪动两个节点,当fast==NULL || fast->next==NULL 时,slow所指向的节点就是中间节点。
节点为奇数个时:
节点为偶数个时:
struct ListNode* middleNode(struct ListNode* head)
{
//判断head是否为空,虽然题目中所述时head不为空,但最好要判断一下养成习惯
if (head == NULL || head->next == NULL)
return head;
struct ListNode* slow = head, * fast = head;
while (fast->next)
{
slow = slow->next;//slow每次往后进一个节点
fast = fast->next->next;//fast每次往后进两个节点
if (fast == NULL)//当链表节点个数为奇数个时,fast最终等于NULL,所以必须要在此设置判断条件
break;
}
return slow;
}