博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法题—leetcode328:奇偶链表
阅读量:2441 次
发布时间:2019-05-10

本文共 1260 字,大约阅读时间需要 4 分钟。

题目描述
给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 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著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路分析
1、题目要求时间复杂度是O(n),空间复杂度是O(1),说明只让我们遍历一遍链表2、可以设置两个指针p和q,分别指向奇数节点的开始位置和偶数节点开始的位置3、可以发现奇数节点的下一个节点是偶数节点的下一个节点4、偶数节点的下一个节点是奇数节点的下一个节点5、就像麻花一样
通过代码
/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */class Solution {
public ListNode oddEvenList(ListNode head) {
if ((head==null)||(head.next==null)) return head; ListNode p =head; ListNode q=head.next; ListNode x=q; for(;;){
if (q.next!=null){
p.next=q.next; p=p.next; }else break; if (p.next!=null){
q.next=p.next; q=q.next; }else{
q.next=null; break; } } p.next=x; return head; }}
你可能感兴趣的文章
adsl设置(转)
查看>>
Wii将有一个可升级的Linux操作系统(转)
查看>>
Linux机为先锋智能机和PDA06销量大(转)
查看>>
Oracle与SQL Server在企业应用中的比较(转)
查看>>
Unix类操作系统入门(转)
查看>>
让FreeBSD使用ntpd同步时间(转)
查看>>
用cat命令查看文件内的特殊字符(转)
查看>>
debian sid下vmware不能运行一则(转)
查看>>
Linux操作系统套接字编程的5个隐患(转)
查看>>
Ubuntu Linux:定制Ubuntu安装CD(转)
查看>>
调查显示:企业级Linux用户不断攀升(转)
查看>>
Ubuntu/Linux入门介绍-dpkg(转)
查看>>
SCO UNIX学习宝典 高级进阶(转)
查看>>
Oracle9i RAC for RedFlag Linux DC4.1 32bit 安装流程(转)
查看>>
Sybase和Oracle安装过程中常遇到的问题(转)
查看>>
红帽Linux新系统整合虚拟技术 实现简易操作(转)
查看>>
Linux下/etc/default/boot文件字段说明(转)
查看>>
Linux壁纸系列三十四(转)
查看>>
使用带有Dtrace的FreeBSD(转)
查看>>
Fedora Core 4硬盘安装方法(转)
查看>>