要求空间复杂度O(1) 那就只能用指针不断改链表的指针, 不能建立新的内存

时间复杂度O(1) 一遍遍历 不能嵌套循环

我的思想是:

  1 如果链表元素数量小于等于2个,那就无法操作

  2 能操作的情况下:

    cur指向第一个元素    不断后移 标记奇数下标的元素

    odd 指向第二个元素   不断后移标记偶数下标的元素

    tail指向尾巴元素  时刻保持指向队尾

    mid指向尾巴元素   标记最开始的时候的队尾元素

    循环:

      把cur.next 改成odd.next , odd.next改为null  这样 第一个偶数下标元素移除了链表

      把 tail.next 改成odd  tail后移到tail.next上    这样,第一个偶数元素放到了队尾 并将队尾指针后移

      cur后移一位 指向之前第三个元素 也就是整个链表第二个下标为奇数的元素

      ----------第一轮结束  继续若干轮

    什么时候移动完了:

      1 如果链表是奇数个元素:

        cur一直指向原本奇数下标的元素并不断后移,如果cur和mid(原本的队尾)  碰头了 说明 链表改完了

      2 如果链表是偶数个元素:

        mid是原本是原本的队尾元素,但是他是第偶数个,某一轮循环结束发现 mid.next是null

          说明他被移动到了队尾,也就改完整个链表了

代码:

 # Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None class Solution:
def oddEvenList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
tail = head
cur = head
while tail.next is not None:
tail = tail.next
mid = tail
while cur.val != mid.val or mid.next is not None:
odd = cur.next
cur.next = odd.next
odd.next = None
cur = cur.next
tail.next = odd
tail = tail.next
return head

leetcode 奇偶链表 python的更多相关文章

  1. leetcode 相交链表 python实现

    这道题 要想解决其实不难, 开两层循环进行遍历就能实现,但是会超时 如果想要O(n) 的时间复杂度, 我考虑用哈希表来存储遍历过的元素,如果发现当前遍历的元素在哈希表里,那说明交叉点就在这 这里利用了 ...

  2. LeetCode:奇偶链表【328】

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

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

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

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

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

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

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

  6. leetcode 328 奇偶链表

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

  7. Java实现 LeetCode 328 奇偶链表

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

  8. Leetcode解题-链表(2.2.0)基础类

    1 基类的作用 在开始练习LeetCode链表部分的习题之前,首先创建好一个Solution基类,其作用就是: Ø  规定好每个子Solution都要实现纯虚函数test做测试: Ø  提供了List ...

  9. LeetCode 单链表专题 (一)

    目录 LeetCode 单链表专题 <c++> \([2]\) Add Two Numbers \([92]\) Reverse Linked List II \([86]\) Parti ...

随机推荐

  1. POJ 2438 Children’s Dining (哈密顿图模板题之巧妙建反图 )

    题目链接 Description Usually children in kindergarten like to quarrel with each other. This situation an ...

  2. BOOST 之filesystem, path

    目录[-] 使用 boost::filesystem 的第一个程序 清单 1. 用于确定某个文件的类型是否为 Directory 的代码 了解 Boost path 对象 清单 2. 创建 Boost ...

  3. C++的各种初始化方式

    C++小实验测试:下面程序中main函数里a.a和b.b的输出值是多少? #include <iostream> struct foo { foo() = default; int a; ...

  4. 2016.6.17——Valid Parentheses

    Valid Parentheses 本题收获: 1.stack的使用 2.string和char的区别 题目: Given a string containing just the character ...

  5. Redis简介——(一)

    1.关于关系型数据库和nosql数据库 关系型数据库是基于关系表的数据库,最终会将数据持久化到磁盘上,而nosql数据 库是基于特殊的结构,并将数据存储到内存的数据库.从性能上而言,nosql数据库 ...

  6. wamp中mysql安装时能启动,重启后无法启动的解决办法

    第一次安装wamp之后,所有服务可以正常使用,但是重启之后wamp的图标就变成黄色的了,重装了也这样 查看一下错误日志: 日志显示的错误是这样的: 日志提示可能是3306端口被占用的错误,那来看一下是 ...

  7. Cloud Lab: 泰晓实验云台【转】

    转自:http://tinylab.org/cloud-lab/ 可快速构建的计算机课程在线实验平台 由 Wu Zhangjin 创建于 2017/10/06 评论 打赏 项目描述 泰晓实验云台 项目 ...

  8. MongoDB安全:创建角色(User-Defined Roles)

    MongoDB已经定义了一些内建角色,同时还提供了用户自定义角色的功能,以满足用户千差万别的需求. 官文User-Defined Roles中对其有简略介绍,但要熟悉怎么创建角色,还需要了解下面的这些 ...

  9. Hexo命令无法找到 -问题修复

    本人PC安装hexo按照官方npm方式下载: npm install -g hexo-cli 但是到了控制台,输入hexo总是无法找到该命令,提示:Command not Found!!!,无论git ...

  10. AdvStringGrid 获取值

    stringGrid.row stringgrid.col分别为当前行和列 stringGrid.cells[stringgrid.col,stringGrid.row]就是当前cell的值 ---- ...