328. Odd Even Linked List
2016-01-26 15:08
211 查看
问题:
单链表位于奇数位置的统一放在前面,位于偶数位置的统一放在后面
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
return
思路:
一个很傻的想法:扫描一遍,找到链表的长度和链表的tail。再扫描一遍,把偶数的挂在tail后面即可
一个比较不傻的想法:只循环一遍。保存下第一个偶节点的位置。分别用两个指针,一个指向第一个节点,一个指向第二个节点,移动的过程中把奇偶俩条链子连接好,直到这两个指针中有一个的next为空(思考一下,无论是哪一个指针这时的next为空,偶数链条最后一个的next都为空)。最后把两条链接起来。
程序
第一种的程序
第二种的程序
单链表位于奇数位置的统一放在前面,位于偶数位置的统一放在后面
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.
思路:
一个很傻的想法:扫描一遍,找到链表的长度和链表的tail。再扫描一遍,把偶数的挂在tail后面即可
一个比较不傻的想法:只循环一遍。保存下第一个偶节点的位置。分别用两个指针,一个指向第一个节点,一个指向第二个节点,移动的过程中把奇偶俩条链子连接好,直到这两个指针中有一个的next为空(思考一下,无论是哪一个指针这时的next为空,偶数链条最后一个的next都为空)。最后把两条链接起来。
程序
第一种的程序
public class Solution { public ListNode oddEvenList(ListNode head) { if(head == null) return null; if(head.next == null) return head; ListNode tail = head; int count = 1; while(tail.next != null) { tail = tail.next; count++; } ListNode h = head; for(int i = 0; i < count/2; i++) { ListNode tmp = h.next; tail.next = tmp; h.next = tmp.next; tail = tail.next; h = h.next; } tail.next = null; return head; } }
第二种的程序
public class Solution { public ListNode oddEvenList(ListNode head) { if(head == null || head.next == null ) return head; ListNode oddhead = head; ListNode sevenhead = head.next; ListNode evenhead = head.next; while(oddhead.next != null && evenhead.next != null) { oddhead.next = oddhead.next.next; oddhead = oddhead.next; evenhead.next = evenhead.next.next; evenhead = evenhead.next; } oddhead.next = sevenhead; return head; } }
相关文章推荐
- split 分割 字符串(分隔符如:* ^ : | , .) 及注意点
- android singleTask 加载模式的理解
- python 安装模块
- Linux 最常用的操作命令
- 可公度线段与欧几里得(Euclid)算法
- 设计模式之:构造者模式
- skb-5
- MyBatis之五:动态sql语句
- 链接命名转驼峰命名
- youku的js脚本的工具函数和初始化方法
- gopacket 使用
- 泉水
- SLF4J 的几种实际应用模式--之一:SLF4J+Log4J(转载)
- 公司服务器被黑客入侵后你要如何处理?
- skb-4
- flume nginx 日志处理异常 JsonParseException: Unexpected character ('(' (code 40)): expected a valid value
- 搭mongodb+zookeeper+kafka环境
- 蓝桥杯:基础练习 查找整数
- autoupdate script
- Ctrl+Z 后恢复进程到前台