链表的中间结点
1°题目链接
链接
2°思路
思路1:遍历一遍 计数 然后/2 再遍历一遍
思路2:slow fast指针
slow指针一次走1步
fast指针一次走2步
当fast为空的时候
slow的位置就是中间结点
奇数个:
1 2 3 4 5
fast走完第三次为空
slow走完第三次就是3
偶数个:
1 2 3 4 5 6
fast走完第四次为空
slow走完第四次就是4
接下来实现思路2
3°实现
struct ListNode* middleNode(struct ListNode* head)
{
struct ListNode* slow = head;
struct ListNode* fast = head;
while (fast&&fast->next)
{
slow = slow->next;
fast = fast->next->next;
}
return slow;
}
4°运行结果
#8链表的中间节点#完