文章
159
粉丝
0
获赞
0
访问
9.8k
(1)基本思想:1.找中间节点 快慢指针 , 一个一次走一步一个一次走两步 当快指针走到链表尾 null时慢指针指向中间节点
2.逆转后半链表
3.合并两个链表
(2)
#include<iostream>
typedef struct node{
int data;
struct node *next;
} NODE;
void rearrangelist(node *head){
if(head == nullptr || head.next ==nullptr ||head.next.next = nullptr){
return // 空链表 如果 只有一个节点的链表,无需重新排列
}
NODE *slow = head;
NODE *fast = head;
while(fast != nullptr && fast->next !=nullptr){
slow = slow->next;
fast = fast->next->next;
}//slow指向中间节点
// 2. 分割链表:将链表分为两个部分
NODE *secondhalfhead =slow->next;
slow->next = nullptr;
// 3. 逆置后半部分链表
NODE *prev = nullptr;
NODE *curr = secondHalfHead;
NODE *next = nullptr;
while(curr != nullptr){
next = curr->next;
curr->next = pre;
pre = curr;
curr = next;
}
secondHalfHead = pre;
// 4. 合并两个链表
NODE *firstListCurr = head->next; // 前半部分链表的当前节点
NODE *secondListCurr = secondHalfHead; // 后半部分链表的当前节点
N...
登录后发布评论
暂无评论,来抢沙发