当前位置: 首页 > wzjs >正文

建设网站教程2016seo推广薪资

建设网站教程2016,seo推广薪资,韩国最新新闻事件,小程序模板价格143. 重排链表https://leetcode.cn/problems/reorder-list/ 目录 解法一:公式化哈希解法 解法二:寻找链表中点 链表逆序 合并链表 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln - 1 → Ln请将其重…

143. 重排链表https://leetcode.cn/problems/reorder-list/

目录

 解法一:公式化哈希解法

解法二:寻找链表中点 + 链表逆序 + 合并链表


 

给定一个单链表 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 <= node.val <= 1000

 解法一:公式化哈希解法

使用哈希表存放链表结点,再按题目要求逻辑进行拼接。

        map<int, ListNode*> dict;

        dict.insert(pair(count++, cur));

/*** 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) {// 使用map来存放每个链表结点map<int, ListNode*> dict;int count = 0; // count进行计数ListNode* cur = head;while(cur){dict.insert(pair(count++, cur));cur = cur->next;}// 进行后续拼接操作ListNode* newhead = new ListNode(-1);ListNode* pre = newhead;int left = 0, right = count-1;count = 0;while(left <= right){if(count++ % 2 == 0)cur = dict[left++];elsecur = dict[right--];cur->next = nullptr;pre->next = cur;pre = cur;}head = newhead->next;}
};

此题的随机访问特性也可以使用vector进行存储。

        vector<ListNode*> dict;

        dict.push_back(cur);        

/*** 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) {// 使用map来存放每个链表结点vector<ListNode*> dict;int count = 0; // count进行计数ListNode* cur = head;while(cur){// dict.insert(pair(count++, cur));dict.push_back(cur);count++;cur = cur->next;}// 进行后续拼接操作ListNode* newhead = new ListNode(-1);ListNode* pre = newhead;int left = 0, right = count-1;count = 0;while(left <= right){if(count++ % 2 == 0)cur = dict[left++];elsecur = dict[right--];cur->next = nullptr;pre->next = cur;pre = cur;}head = newhead->next;}
};

解法二:寻找链表中点 + 链表逆序 + 合并链表

注意到目标链表即为将原链表的左半端和反转后的右半端合并后的结果。

咱这规律也没发现……看了思路自己写吧。

 

/*** 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) {if(!head && head->next != nullptr)return;// 1、利用快慢指针找到链表的中间结点ListNode* slow = head, *fast = head;while(fast->next != nullptr && fast->next->next != nullptr){slow = slow->next;fast = fast->next->next;}// 2、反转后半部分链表ListNode* newhead = new ListNode(-1);newhead->next = nullptr;while(slow){fast = slow->next;slow->next = newhead->next;newhead->next = slow;slow = fast;}// 3、合并这俩个链表ListNode* l1 = head;ListNode* l2 = newhead->next;while(l1 && l2){// 用fast和slow分别记录l1和l2后面指针fast = l1->next;slow = l2->next;l1->next = l2;l1 = fast;l2->next = l1;l2 = slow;}}
};

http://www.dtcms.com/wzjs/328231.html

相关文章:

  • 做系统后怎么找回网站收藏夹广州网站推广服务
  • 模板网站的弊端福州seo推广优化
  • 哪个网站做原创歌曲公众号推广合作平台
  • 商标设计logo图案需要注册吗站长工具seo综合查询怎么关闭
  • css3网站制作教程视频百度提交入口网站
  • 网站系统应怎么做会计分录app开发公司推荐
  • 合川网站建设广告网站推荐
  • 多多卡起货网站建设品牌策略的7种类型
  • 唐山中企动力做网站seo 的原理和作用
  • 做网站如何应用Java如何在百度上发广告
  • 鞍山最新消息百度上如何做优化网站
  • 如果做好招聘网站建设百度导航下载2020新版语音
  • 网站内套网站代码昆明网络推广公司排名
  • 今天郑州最新状况seo网站推广的主要目的包括
  • 做网站时版权怎么写教育培训机构
  • 零食公司建立网站的原因网络推广有哪几种方法
  • 详情页设计排版seo营销名词解释
  • 手机蓝牙app开发教程武汉seo全网营销
  • 青岛网站建设有限公司百度网站优化工具
  • 廉江人做寄生虫网站青岛网站建设维护
  • 建设网站需要提供什么资料广州优化防控措施
  • 用flask做的网站有哪些小程序推广赚佣金平台
  • 培训学校类网站建设方案百度首页广告
  • 品牌网站定制开发站长工具seo优化系统
  • 毕业设计做网站的步骤免费seo在线工具
  • 做网站这么做合肥seo按天收费
  • 北京网站建设设计上海seo优化公司bwyseo
  • 郑州新闻最新消息今天关键词排名优化软件价格
  • 万网解压缩wordpress搜索引擎优化是什么意思
  • dede做漫画网站的案例seo优化推广技巧