题目描述

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

请尝试使用原地算法完成。你的算法的空间复杂度应为 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

说明:

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

解题思路

分别记录奇偶链表的首节点,其中偶链表的头节点分开记录,然后从偶链表头节点的下一个节点开始遍历,按照奇偶位置分别拼接到奇偶链表中,最后将偶链表的头节点拼接到奇链表的末尾,然后将偶链表的最后一个节点的next指针置为空。

代码

 /**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* oddEvenList(ListNode* head) {
if(head == NULL || head->next == NULL || head->next->next == NULL) return head;
ListNode *odd = head, *even = head->next, *even_head = head->next, *right = head->next->next;
bool is_odd = true;
while(right){
if(is_odd){
odd->next = right;
odd = right;
right = right->next;
is_odd = false;
}
else{
even->next = right;
even = right;
right = right->next;
is_odd = true;
}
}
odd->next = even_head;
even->next = NULL;
return head;
}
};

LeetCode 328. 奇偶链表(Odd Even Linked List)的更多相关文章

  1. LeetCode 328. 奇偶链表(Odd Even Linked List)

    328. 奇偶链表 328. Odd Even Linked List 题目描述 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起.请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是 ...

  2. Java实现 LeetCode 328 奇偶链表

    328. 奇偶链表 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起.请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性. 请尝试使用原地算法完成.你的算法的空间复杂 ...

  3. LeetCode 328——奇偶链表(JAVA)

    给定一个单链表,把所有的奇数节点和偶数节点分别排在一起.请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性. 请尝试使用原地算法完成.你的算法的空间复杂度应为 O(1),时 ...

  4. leetcode 328 奇偶链表

    更新代码: 开头检测是否需要调整(是否具有第三个节点) 使用三个ListNode* 变量记录奇偶链表的头尾headA,tailA为奇链表,headB为偶数链表,由于只需要最后令tailA->ne ...

  5. LeetCode 328:奇偶链表 Odd Even Linked List

    ​给定一个单链表,把所有的奇数节点和偶数节点分别排在一起.请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性. 请尝试使用原地算法完成.你的算法的空间复杂度应为 O(1), ...

  6. [Swift]LeetCode328. 奇偶链表 | Odd Even Linked List

    Given a singly linked list, group all odd nodes together followed by the even nodes. Please note her ...

  7. LeetCode:奇偶链表【328】

    LeetCode:奇偶链表[328] 题目描述 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起.请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性. 请尝试使用原地 ...

  8. LeetCode 92. 反转链表 II(Reverse Linked List II)

    92. 反转链表 II 92. Reverse Linked List II 题目描述 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明: 1 ≤ m ≤ n ≤ 链表长度. LeetC ...

  9. C#LeetCode刷题-链表

    链表篇 # 题名 刷题 通过率 难度 2 两数相加   29.0% 中等 19 删除链表的倒数第N个节点   29.4% 中等 21 合并两个有序链表 C#LeetCode刷题之#21-合并两个有序链 ...

随机推荐

  1. python中的% 是什么意思, 起到什么作用?

    %Y会被无世纪的年份所替代.%m会被01到12之间的一个十进制月份数替代,其他依次类推. 1.%在python的格式化输出,有转换字符的飞鲸作用: (1)%c 整数转成对应的 ASCII 字元: (2 ...

  2. SQL学习——BETWEEN运算符

    原文链接 BETWEEN的作用 BETWEEN 操作符用于选取介于两个值之间的数据范围内的值. BETWEEN的边界 BETWEEN运算符选择给定范围内的值.值可以是数字,文本或日期. BETWEEN ...

  3. SSH配置(同一服务器不同用户)

    一.cxwh用户ssh免密登陆至xtjk用户 1.cxwh用户执行 ssh-keygen -t rsa -N "" -f /home/cxwh/.ssh/id_rsa cp /ho ...

  4. asp.net 页面静态化

    页面静态化,有三种方式 伪静态  真静态,折中法  现在我做的是折中发 创建一个asp.net  页面,  连接跳转到还未生成的页面 创建HttpHandle类 using System;using ...

  5. 地沟油jiance

    与地沟油较劲九年(我和我的祖国) 任  飞 2019年06月13日05:00  来源:人民网-人民日报 分享到:     地沟油中含有多种有毒有害物质,但地沟油的检测却是一大难题.单靠眼睛谁也无法判断 ...

  6. Gym - 102141D 通项公式 最短路

    题目很长,但是意思就是给你n,A,B,C,D n表示有n个城市 A是飞机的重量 B是一个常数表示转机代价 C是单位燃油的价格 D是一个常数 假设一个点到另外一个点的距离为整数L 起飞前的油量为f  则 ...

  7. HTML禁用一块区域点击

    style="pointer-events: none;" 此方法可以禁止鼠标点击指定区域,但是对于键盘事件无法屏蔽,最好禁用一下键盘事件,如:tab

  8. Idea中Module is not specified解决办法

    打开idea,想跑一个类,但是,给我报了一个红叉: 当我点击run的时候,弹出来一个框: “Error:Module not specified”  Module 未指定 “这个原因是项目文件夹有修改 ...

  9. C语言例题

    1.连接两个字符串 将两个字符串连接,不要用stract函数 2.求矩阵外围元素之和 求3行3列矩阵的外围元素之和. 3.求矩阵主对角线和副对角线元素之和 求5行5列矩阵的主对角线和副对角线元素之和. ...

  10. Eclipse断点种类

    本文是Eclipse调试(1)——基础篇 的提高篇.分两个部分: 1) Debug视图下的3个小窗口视图:变量视图.断点视图和表达式视图 2) 设置各种类型的断点 变量视图.断点视图和表达式视图 1. ...