LeetCode笔记:328. Odd Even Linked List
问题
Given a singly linked list, group all odd nodes together followed by the even nodes. Please note here we are talking about the node number and not the value in the nodes. You should try to do it in place. The program should run in O(1) space complexity and O(nodes) time complexity. Example: Given 1->2->3->4->5->NULL, return 1->3->5->2->4->NULL. Note: The relative order inside both the even and odd groups should remain as it was in the input. The first node is considered odd, the second node even and so on ...
大意:
给出一个简单链表,集合所有奇数位置的节点,后面跟着所有偶数位置的节点。请注意这里我们说的是节点的位置而不是节点值。 你应该尝试在固定空间做。程序应该在O(1)的空间复杂度和O(nodes)的时间复杂度下运行。 例子: 给出 1->2->3->4->5->NULL, 返回 1->3->5->2->4->NULL。 注意: 偶数和奇数组中节点的相对位置要保持不变。 第一个节点被认为是奇数,第二个是偶数,如此往复。
思路:
题目的要求根据例子就可以明白,奇数和偶数位置的节点分成两段来排列,关键是要在O(1)的空间复杂度下做,否则直接用一个新链表就可以简单完成。
O(1)的空间下也好做,我们用两个头结点,一个为奇数的头结点,一个为偶数的头结点,然后遍历链表,奇数位置的节点就记录在奇数头结点后面,偶数位置的节点就记录在偶数头结点后面,两者是交替记录的,因为我们用的还是原来的节点,只是next指针指向的节点变了,所以并没有增加空间。遍历完后我们得到了奇偶两条链表,将偶链表的头结点接到奇链表的最尾端就可以了。
要注意一些节点为Null的处理。
代码(Java):
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode oddEvenList(ListNode head) {
if (head == null || head.next == null) return head;
ListNode even = head.next;
ListNode evenNext = even;
ListNode oddNext = head;
while (evenNext != null) {
oddNext.next = evenNext.next;
if (oddNext.next != null) {
oddNext = oddNext.next;
evenNext.next = oddNext.next;
evenNext = evenNext.next;
} else {
break;
}
}
oddNext.next = even;
return head;
}
}
相关文章
- 详解Go可用性(六) 熔断
- Go语言HTTP Server源码分析
- 2017年4月编程语言排行榜:Hack首次进入前五十
- 盘点常用语言HTTP请求客户端的惊艳框架
- 50 万行 Go 代码,美国一组织从 Python 2 迁移到 Go
- 从代码层读懂Java HashMap的实现原理
- 谷歌的最新NLP模型,现在能陪你从诗词歌赋谈到人生哲学
- 不要再天天写表单了,淘宝大牛教你零基础写PHP扩展
- Java Web模板代码生成器的设计与实现
- 我们一起学习RSA-PSS 算法
- 关于Git的几个使用技巧
- SpaceX 使用 Rust 为部分新项目构建原型
- signalR+redis分布式聊天服务器搭建
- Git如何处理大仓库
- 想要写出好味道的代码,你需要养成这些好习惯!
- 用C语言写面向的对象是一种什么样的体验
- 历时大半年,Github团队成功减少30kb依赖体积
- 聊聊Clean Code的编码、重构技巧
- 调查:企业越来越依赖开源软件
- 产品经理:你能不能用Div给我画条龙?