问题描述:
给定一个头结点为head的非空单链表,返回链表的中间结点。如果有两个中间节点,则返回第二个中间结点,个数为奇数返回一个值,个数为偶数返回两个中间结点的第二个值。
思路:
用快慢指针来寻找中间结点
定义一个slow和fast结构体指针,slow每次走一步,而fast每次走两步,当fast的next为空或fast为空时,结束循环,最终slow即为中间结点。
struct ListNode* middleNode(struct ListNode* head)
{struct ListNode* slow = head, * fast = head;while (fast && fast->next){slow = slow->next;//slow走一步fast = fast->next->next;//fast走两步}return slow;
}