先通过双指针找到链表的中点(如果是偶数链表则向上取整),再创建一个Node List类的指针指向slow后的第一个结点,创建完以后令slow等于nullptr(这样做的目的是断开链表),并以此将slow后的结点依次压入栈中,再从头节点开始依次弹出栈中的元素,并将该元素插入到链表俩俩结点之间,直到栈为空
class Solution {
public:
void reorderList(ListNode* head) {
stack<ListNode*> nodeStack;
ListNode* fast = head, *slow = head;
while(fast && fast->next){
slow = slow->next;
fast = fast->next->next;
}
ListNode* p = slow->next;
slow->next = nullptr;
while(p){
nodeStack.push(p);
p = p->next;
}
p = head;
while(p && !nodeStack.empty()){
ListNode* temp = nodeStack.top();
nodeStack.pop();
temp->next = p->next;
p->next = temp;
p = p->next->next;
}
}
};