一般,快慢指针找中点,fast和slow都初始化为head,while循环里面判断fast。得到的结果是:
若链表是奇数个节点,slow为中间节点,
若链表是偶数个节点,slow为中间靠后的节点。
如BM13 判断一个链表是否为回文结构
ListNode* slow = head;
ListNode* fast = head;
while (fast != NULL && fast->next != NULL) {
slow = slow->next;
fast = fast->next->next;
}
但是,BM12 单链表的排序,特殊在需要记录slow(即上述的“中间靠后的节点”)的前一个结点。所以,快慢指针left和right的初始化不同,分别为head和head->next->next。此时,mid和right与BM13的slow和fast结果相同。
ListNode* left = head;
ListNode* mid = head->next;
ListNode* right = head->next->next;
while(right != NULL && right->next != NULL){
left = left->next;
mid = mid->next;
right = right->next->next;
}
left->next = NULL;