快慢指针
使用时候的注意点
在这里插入代码片
ListNode* midNode(ListNode* head)
{
ListNode* slow = head, * fast = head;
//如果是 1 2 3 4 5 得到3
//如果是 1 2 3 4 5 6 得到4
//可以说这样用的话 得到的是中间靠后的位置
while (fast != nullptr)
{
slow = slow->next;
fast = fast->next;
if (fast != nullptr)
fast = fast->next;
}
//如果是 1 2 3 4 5 得到3
//如果是 1 2 3 4 5 6 得到4
//可以说这样用的话 得到的是中间靠后的位置
slow = head, fast = head;
//使用这种方式要注意head!=nullptr
while (fast->next != nullptr)
{
slow = slow->next;
fast = fast->next;
if (fast->next != nullptr)
fast = fast->next;
}
//那么如何得到中间靠前的数呢?
//方法就是在slow移动前,检查fast和fast->next是否有效
//如果是 1 2 3 4 5 得到3
//如果是 1 2 3 4 5 6 得到3
slow = head, fast = head;
while (fast->next != nullptr)
{
fast = fast->next;
if (fast->next != nullptr)
fast = fast->next;
else
break;
slow = slow->next;
}