给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。

请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。

示例 1:

输入: 1->2->3->4->5->NULL 输出: 1->3->5->2->4->NULL

示例 2:

输入: 2->1->3->5->6->4->7->NULL 输出: 2->3->6->7->1->5->4->NULL

说明:

应当保持奇数节点和偶数节点的相对顺序。 链表的第一个节点视为奇数节点,第二个节点视为偶数节点,以此类推。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/odd-even-linked-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

个人理解,拿到题,我先考虑的是分成两个链表,最后把两个链表合起来= =,于是直接写了:

/*** 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:ListNode* oddEvenList(ListNode* head) {if(head == nullptr){return head;}ListNode* head1 = new ListNode();ListNode* n1 = head1;n1->val = head->val;head=head->next;if(head == nullptr){return head1;}ListNode* head2 = new ListNode();ListNode* n2 = head2;n2->val = head->val;head=head->next;int i = 3;while(head!=nullptr){ListNode* Node = new ListNode();Node->val = head->val;Node->next =NULL;if(i%2 == 1){n1->next = Node;n1 = n1->next;}if(i%2 == 0){n2->next = Node;n2 = n2->next;}head = head->next;i++;}n1->next = head2;return head1;}
};

通过了,我个人对链表这一块其实学的不怎么好,完全靠感觉写的。

C++算法学习(力扣:328. 奇偶链表)相关推荐

  1. C++算法学习(力扣:1091. 二进制矩阵中的最短路径)

    在一个 N × N 的方形网格中,每个单元格有两种状态:空(0)或者阻塞(1). 一条从左上角到右下角.长度为 k 的畅通路径,由满足下述条件的单元格 C_1, C_2, -, C_k 组成: 相邻单 ...

  2. C++算法学习(力扣:面试题 16.04. 井字游戏)

    设计一个算法,判断玩家是否赢了井字游戏.输入是一个 N x N 的数组棋盘,由字符" ","X"和"O"组成,其中字符" &quo ...

  3. C++算法学习(力扣:201. 数字范围按位与)

    给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点). 示例 1: 输入: [5,7] 输出: 4 ...

  4. C++算法学习(力扣:134. 加油站)

    在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升. 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升.你从其中的一个加 ...

  5. C++算法学习(力扣:402. 移掉K位数字)

    给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示例 1 : 输入: nu ...

  6. C++算法学习(力扣:859. 亲密字符串)

    给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回 true :否则返回 false . 交换字母的定义是取两个下标 i 和 j (下标 ...

  7. C++算法学习(力扣:1122. 数组的相对排序)

    给你两个数组,arr1 和 arr2, arr2 中的元素各不相同 arr2 中的每个元素都出现在 arr1 中 对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序 ...

  8. C++算法学习(力扣:1003. 检查替换后的词是否有效)

    给定有效字符串 "abc". 对于任何有效的字符串 V,我们可以将 V 分成两个部分 X 和 Y,使得 X + Y(X 与 Y 连接)等于 V.(X 或 Y 可以为空.)那么,X ...

  9. C++算法学习(力扣:1254. 统计封闭岛屿的数目)

    有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域(记号为 1 ). 我们从一块陆地出发,每次可以往上下左右 4 个方向相邻区域走,能走到的所有陆地区域,我们将其称为一座「岛屿」 ...

最新文章

  1. UML之交互图(协作图和顺序图)
  2. flex 布局实现 横穿线效果 自适应文字内容,自适应调整线宽
  3. js数组的sort排序的原理和应用
  4. 简单的python爬虫实例
  5. 学习记录(一)之h5_canvas
  6. 单实例数据库和多实例数据库
  7. [BZOJ4530][Bjoi2014]大融合 LCT + 启发式合并
  8. 20145235李涛《网络对抗》逆向及Bof基础
  9. python网络爬虫与信息提取北京理工大学ppt_北京理工大学Python网络爬虫与信息抽取学习笔记10,信息提取...
  10. 用Vue.js和Webpack开发Web在线钢琴
  11. javascript中模仿接口(interface)
  12. 易语言单窗口单ip软件源码_梦幻西游怎样多开ip转金?老玩家的十大转金秘籍奉上...
  13. 将BC26连接至OneNET平台
  14. 一文搞懂Handler机制原理
  15. mcafee mysql audit_mysql添加mcafee 审计插件
  16. 微软输入法数字有间隔_各种中文输入法中输入间隔号“·”的措施
  17. FBEC2020 | 贾瑶琪:打造区块链项目最好的方式,是打造开源的系统
  18. KiCad坐标文件(.pos)转表格(.xlsx)工具
  19. cadence allegro - PCB线路敷铜渲染
  20. 英伟达失去手机与平板市场:拖延症惹的祸

热门文章

  1. 【转】WPF/Silverlight开发的15个最佳实践
  2. printf(%f\n, 3);输出结果为什么是0.000000(转载)
  3. lftp mirror 上传目录
  4. Android 数字格式化
  5. 共轭梯度法(Conjugate Gradient)
  6. Matlab图形修饰之裁剪处理
  7. atime、mtime、ctime
  8. C#获取上传文件的扩展名
  9. 数据结构作业——ギリギリ eye(贪心+优先队列/贪心+并查集)
  10. poj 2186(强连通分量)