剑指 Offer II 026. 重排链表
创始人
2024-06-01 14:25:03
0

题目链接

剑指 Offer II 026. 重排链表 mid

题目描述

给定一个单链表 L的头节点 head,单链表 L表示为:

L0 → L1 → … → Ln-1 → Ln
请将其重新排列后变为:

L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …

不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例 1:

在这里插入图片描述

输入: head = [1,2,3,4]
输出: [1,4,2,3]

示例 2:

在这里插入图片描述

输入: head = [1,2,3,4,5]
输出: [1,5,2,4,3]

提示:

  • 链表的长度范围为 [1,5∗104][1, 5 * 10^4][1,5∗104]
  • 1<=node.val<=10001 <= node.val <= 10001<=node.val<=1000

分析:栈

我们首先用 快慢指针 找到链表的中点,将中点后面一段的结点 塞到一个栈stack里(这样就可以把结点的顺序反过来,
栈顶元素就是最后一个结点
),接着再将栈中的结点弹出,插入到第一段中的位置(每两个节点中间插入一个)。

当链表结点数量是 奇数 时,slow指针需要往后移动一次才行。

在这里插入图片描述

当链表结点数量是 偶数 时。

在这里插入图片描述
时间复杂度:O(n)O(n)O(n)

代码:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:void reorderList(ListNode* head) {ListNode * fast = head , *slow = head , *pre = nullptr;//快慢指针 求链表的中点while(fast && fast->next){pre = slow;fast = fast->next->next;slow = slow->next;}//根据结点数量是 奇数 还是 偶数分别处理,将链表分为两段if(fast){pre = slow;slow = slow->next;pre->next = nullptr;}else{pre->next = nullptr;}//用栈存储第二段的结点stack stk;while(slow){stk.push(slow->val);slow = slow->next;}//拼接到一起ListNode * cur = head;while(!stk.empty()){ListNode *nextNode = cur->next;int val = stk.top();stk.pop();ListNode *node = new ListNode(val);cur->next = node;node->next = nextNode;cur = nextNode;}}
};

相关内容

热门资讯

华纺股份涨2.03%,成交额7... 7月7日,华纺股份盘中上涨2.03%,截至11:02,报3.51元/股,成交7963.05万元,换手...
九芝堂跌2.05%,成交额6.... 7月7日,九芝堂(维权)盘中下跌2.05%,截至10:59,报10.03元/股,成交6.08亿元,换...
杭州地铁3号线车厢浓烟弥漫 乘... 转自:今晚报 【#杭州地铁3号线车厢浓烟弥漫# 乘客掩口...
泰和新材:公司芳纶涂覆产品已实... 每经AI快讯,有投资者在投资者互动平台提问:贵司预计芳纶涂覆产线6月底调通,请问现在进展如何? 另外...
兴蓉环境:自来水公司瓶装水已在... 每经AI快讯,有投资者在投资者互动平台提问:领导好,介绍一下公司的瓶装水业务,目前什么状况,谢谢!兴...
抗日英雄戴安澜:永远振翅的“海... 转自:北京日报客户端戴安澜:永远振翅的“海鸥”(铭记历史 缅怀先烈·抗日英雄)戴安澜像(资料照片)。...
上海出台软件信息服务业高质量发... 观点网讯:7月7日,上海市人民政府办公厅印发《上海市促进软件和信息服务业高质量发展的若干措施》通知,...
鱼跃医疗跌2.02%,成交额1... 7月7日,鱼跃医疗盘中下跌2.02%,截至11:06,报34.94元/股,成交1.78亿元,换手率0...
Equinor扩建西欧最大油田   中化新网讯 7月1日,挪威Equinor公司及其合作伙伴宣布,决定投资13亿美元开发北海Joha...
唱着唱着,一代人长大了 转自:人民日报海外版  《风起前的蒲公英》海报受访者供图  《风起前的蒲公英》剧照受访者供图  “蒲...