LCR 026. 重排链表
题目链接:LCR 026. 重排链表
注:该题与 143. 重排链表完全一样
代码如下:
class Solution {
public:void reorderList(ListNode* head){if(head==nullptr||head->next==nullptr||head->next->next==nullptr)return;ListNode* Head=new ListNode;Head->next=nullptr;ListNode* r=head;//找到中间节点ListNode* slow=head,*fast=head,*slow_pre=nullptr;while(fast){slow_pre=slow;slow=slow->next;fast=fast->next;if(fast)fast=fast->next;}slow_pre->next=nullptr;//前后链表进行断开操作//后半段进行逆置操作ListNode* afterLinkHead=new ListNode;afterLinkHead->next=nullptr;while(slow){ListNode* temp=slow;slow=slow->next;temp->next=afterLinkHead->next;afterLinkHead->next=temp;}fast=head;slow=afterLinkHead->next;int count=0;while(fast&&slow)//轮流进行重新插入{ListNode* temp=nullptr;if(count%2==0){temp=fast;fast=fast->next;}else{temp=slow;slow=slow->next;}temp->next=nullptr;r->next=temp;r=temp;count++;}while(fast)//把剩余的节点进行插入{ListNode* temp=fast;fast=fast->next;temp->next=nullptr;r->next=temp;r=temp;}while(slow)//把剩余的节点进行插入{ListNode* temp=slow;slow=slow->next;temp->next=nullptr;r->next=temp;r=temp;}head=Head->next;}
};