题解目录
- 1、题目描述+解释
- 2、算法原理解析
- 3、代码编写
1、题目描述+解释
主要就是实现:第一个节点和最后一个节点交换,第二节点和倒数第二个节点交换,依次交换下去。
2、算法原理解析
3、代码编写
class Solution {
public:void reorderList(ListNode* head) {//先找到中间节点ListNode* slow=head,*fast=head;while(fast&&fast->next){slow=slow->next;fast=fast->next->next;}//此时把链表从slow->next节点分为两个链表ListNode* cur1=head;ListNode* cur2=slow->next;//把slow->next节点的后面断开slow->next=nullptr;//把后面的链表逆序一下ListNode* new_head2=new ListNode(0);while(cur2){ListNode* next=cur2->next;cur2->next=new_head2->next;new_head2->next=cur2;cur2=next;}//此时已有两个链表//合并cur2=new_head2->next;ListNode* NewHead=new ListNode(0);ListNode* ptail=NewHead;while(cur1){ptail->next=cur1;ptail=cur1;cur1=cur1->next;if(cur2){ptail->next=cur2;ptail=cur2;cur2=cur2->next;}}}
};