328. Odd Even Linked List

Total Accepted: 9271 Total
Submissions: 24497 Difficulty: Easy

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 ...

分析:

简单模拟思想。

申请两个指针,一个总是指向当前将要建立连接的奇数节点,一个偶数...最后联立奇数链表和偶数链表就可以。

显然,先建立奇数指针。再偶数指针....

建立奇数指针时,看偶数指针的下一个位置是否存在。存在就建立连接,

并将奇数指针移动当当前奇数节点!

假设不存在就完毕偶数链和奇数链的终于联立。

偶数指针同理。

class Solution {
public:
ListNode* oddEvenList(ListNode* head) {
if(!head || head->next==NULL || head->next->next==NULL)
return head;
ListNode* oddNode=head;//奇数
ListNode* evenNode=head->next;//偶数
ListNode* evenhead=head->next;//偶数头
while(true)
{
if(evenNode->next!=NULL)//假设存在就建立连接
{
oddNode->next=evenNode->next;
oddNode=evenNode->next;//偶数尾巴
}else
{
oddNode->next=evenhead;
evenNode->next=NULL;
break;//建立偶数链表与奇数链表的连接退出循环
} if(oddNode->next!=NULL)
{
evenNode->next=oddNode->next;
evenNode=oddNode->next;
}else
{
oddNode->next=evenhead;
evenNode->next=NULL;
break;//建立......连接退出循环
}
}
return head;
}
};

简化代码:

class Solution {
public:
ListNode* oddEvenList(ListNode* head) {
if(!head || head->next==NULL || head->next->next==NULL)
return head;
ListNode* oddNode=head;//奇数
ListNode* evenNode=head->next;//偶数
ListNode* evenhead=head->next;//偶数头
while(evenNode!=NULL && evenNode->next !=NULL)//无论链表有奇数个还是偶数个节点都以偶数指针作为截止条件
{
oddNode->next=evenNode->next;
oddNode=evenNode->next;//偶数尾巴
evenNode->next=oddNode->next;
evenNode=oddNode->next;
}
oddNode->next=evenhead;
return head;
}
};

注:本博文为EbowTang原创,兴许可能继续更新本文。假设转载,请务必复制本条信息!

原文地址:http://blog.csdn.net/ebowtang/article/details/50611707

原作者博客:http://blog.csdn.net/ebowtang

本博客LeetCode题解索引:http://blog.csdn.net/ebowtang/article/details/50668895

<LeetCode OJ> 328. Odd Even Linked List的更多相关文章

  1. [LeetCode] 328. Odd Even Linked List ☆☆☆(奇偶节点分别放一起)

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

  2. 【一天一道LeetCode】#328 Odd Even Linked List

    一天一道LeetCode系列 (一)题目 Given a singly linked list, group all odd nodes together followed by the even n ...

  3. 【LeetCode】328. Odd Even Linked List 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  4. LeetCode 328. Odd Even Linked List

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

  5. Java [Leetcode 328]Odd Even Linked List

    题目描述: Given a singly linked list, group all odd nodes together followed by the even nodes. Please no ...

  6. LeetCode 328. Odd Even Linked List C#

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

  7. (链表) leetcode 328. Odd Even Linked List

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

  8. 【Leetcode】 328. Odd Even Linked List

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

  9. 【leetcode】328. Odd Even Linked List

    题目如下: Given a singly linked list, group all odd nodes together followed by the even nodes. Please no ...

随机推荐

  1. 《Java编程思想》笔记 第十八章 Java I/O 系统

    1 File 类 File是一个  文件和目录路径名  的抽象表示,通过File可以查看文件的各种信息,也可以增加删除文件. File构造器接受一个路径字符串并把它与实际文件目录映射起来,也能接受父子 ...

  2. thinkphp5最美跳转页面

    声明下:此教程来自TP官网,如果需要看原文,请点击一下链接   http://www.thinkphp.cn/code/3437.html 先给大家看下效果: 直接撸代码: 第一步:为了增加对移动设备 ...

  3. [BZOJ1176][Balkan2007]Mokia cdq+树状数组

    1176: [Balkan2007]Mokia Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 3134  Solved: 1395[Submit][S ...

  4. [BZOJ4568][Scoi2016]幸运数字 倍增+线性基

    4568: [Scoi2016]幸运数字 Time Limit: 60 Sec  Memory Limit: 256 MBSubmit: 1791  Solved: 685[Submit][Statu ...

  5. Spring:面向切片编程

    在之前我们记录Spring的随笔当中,都是记录的Spring如何对对象进行注入,如何对对象的属性值进行注入,即我们讲解的很大部分都是Spring的其中一个核心概念——依赖注入(或者说是控制翻转,IOC ...

  6. Jquery EasyUI选项卡-Tabs的使用方法

    以下是easyUI的tabs的简单实用介绍. var e =$('#main').tabs('exists','accordion'); if(e==true){  $('#main').tabs(' ...

  7. 【NOIP2007】字符串展开解题报告

    描述 Description 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或“4-8”的子串,我们就把它当作一种简写,输出时,用 ...

  8. 转 select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET

    select函数用于在非阻塞中,当一个套接字或一组套接字有信号时通知你,系统提供select函数来实现多路复用输入/输出模型,原型:int select(int maxfd,fd_set *rdset ...

  9. 【原创】项目管理软件之争,禅道和JIRA大对比

    本文摘要: 一. 产品介绍 二. 界面设计 1. 界面颜色设计 2. 布局结构 三. 功能区别 四. 价格对比 五. 后期服务 六. 优缺点 七. 总结 说到项目管理软件,不得不提的是禅道和JIRA. ...

  10. BZOJ 1878 [SDOI2009]HH的项链(扫描线+树状数组)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1878 [题目大意] 给出一个数列,给出m个查询,每次查询一个区间中不相同的数字个数 [ ...