leetcode 328 奇偶链表

更新代码:
开头检测是否需要调整(是否具有第三个节点)
使用三个ListNode* 变量记录奇偶链表的头尾headA,tailA为奇链表,headB为偶数链表,由于只需要最后令tailA->next=headB因此不需要tailB。
使用两个ListNode* 变量来进行遍历,cur记录当前链表节点指针,nxt记录下一个链表节点指针。
使用一个int 变量记录是否为奇数节点,如果是则更新tailA。
time O(n),space O(1)
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
/**
定义四个变量:headA,headB记录第一个和第二个节点,tailA记录奇数节点的尾部,cur为当前遍历节点,next为下一个节点 **/
class Solution {
public:
ListNode* oddEvenList(ListNode* head) {
if(head==NULL||head->next==NULL||head->next->next==NULL) return head;
ListNode* headA=head,*headB=head->next;
ListNode* tailA,*cur=head,*nxt=head->next;
int flag=;
while(nxt){
cur->next=nxt->next;
cur=nxt,nxt=nxt->next;
if(flag) tailA=cur;
flag=(flag+)%;
}
cur->next=NULL;// if(flag) cur->next=NULL;应该也可以
tailA->next=headB;
return headA;
}
};
效果不错

C++代码:定义三个指针变量,cur,nex,head2,思路就是将链表分开为奇偶两部分,cur,和nex分别指向当前节点和下一个节点,当nex的下一个节点为NULL 终止循环,head指向第二个节点(如果有的话);
时间复杂度O(nodes);
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* oddEvenList(ListNode* head) {
if(head==NULL||head->next==NULL) return head;
ListNode* cur;
ListNode* nex;
ListNode* head2;
cur=head;nex=head->next;head2=nex;
int flag=;
while(nex->next!=NULL){
cur->next=nex->next;
cur=nex;nex=nex->next;
flag=-flag;
}
cur->next=NULL; if(flag==){
cur->next=head2;
}else{
nex->next=head2;
}
return head;
}
};
效果一般般:

leetcode 328 奇偶链表的更多相关文章
- LeetCode 328. 奇偶链表(Odd Even Linked List)
328. 奇偶链表 328. Odd Even Linked List 题目描述 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起.请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是 ...
- Java实现 LeetCode 328 奇偶链表
328. 奇偶链表 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起.请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性. 请尝试使用原地算法完成.你的算法的空间复杂 ...
- LeetCode 328——奇偶链表(JAVA)
给定一个单链表,把所有的奇数节点和偶数节点分别排在一起.请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性. 请尝试使用原地算法完成.你的算法的空间复杂度应为 O(1),时 ...
- LeetCode 328. 奇偶链表(Odd Even Linked List)
题目描述 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起.请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性. 请尝试使用原地算法完成.你的算法的空间复杂度应为 O ...
- LeetCode:奇偶链表【328】
LeetCode:奇偶链表[328] 题目描述 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起.请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性. 请尝试使用原地 ...
- C#LeetCode刷题-链表
链表篇 # 题名 刷题 通过率 难度 2 两数相加 29.0% 中等 19 删除链表的倒数第N个节点 29.4% 中等 21 合并两个有序链表 C#LeetCode刷题之#21-合并两个有序链 ...
- LeetCode:分割链表【86】
LeetCode:分割链表[86] 题目描述 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前. 你应当保留两个分区中每个节点的初始相对位置. 示例 ...
- LeetCode:旋转链表【61】
LeetCode:旋转链表[61] 题目描述 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5- ...
- LeetCode:删除链表中的节点【203】
LeetCode:删除链表中的节点[203] 题目描述 删除链表中等于给定值 val 的所有节点. 示例: 输入: 1->2->6->3->4->5->6, val ...
随机推荐
- TensorFlow入门——安装
由于实验室新配了电脑,旧的电脑就淘汰下来不用,闲来无事,就讲旧的电脑作为个人的工作站来使用. 由于在旧电脑上安装的是Ubuntu 16.04 64bit系统,系统自带的是Python 2.7,版本选择 ...
- MySQL 5.7 免安装版 access denied 解决办法
MySQL 5.7 在Windows 下安装的过程很多人都写过了 但是安装完成后用 root 第一次登录时需要密码 可是我根本就没设密码嘛... 搞了半天最后终于搞定了 在执行 mysqld --in ...
- 白盒测试之JUnit与SpringTest的完美结合
通过白盒的单元测试可以验证程序基本功能的有效性,从而保证整个系统的质量,功在一时,利在千秋.目前80%以上公司后台还是基于java,尤其是后台大量采用Spring框架,我们这里采用Junit和Spri ...
- chown -R lyd usbsend
chown -R lyd usbsend chown -R lyd usbsend chown -R lyd usbsend 某一个目录下所有文件授权给lyd
- HTML5日期时间输入类型注意事项(time,date)
原文链接:http://www.webhek.com/post/html5-date.html 1.HTML5规范里只规定date新型input输入类型,并没有规定日历弹出框的实现和样式.所以,各浏览 ...
- JS 转化为String的三种方法
// 1. toString() var num = 8; var numString = num.toString(); console.log(numString); var result = t ...
- UVA - 10829 L-Gap Substrings (后缀自动机+线段树启发式合并)
题意:统计一段字符串中形如UVU的子串个数(其中V的长度固定为g). 问题等价于求满足$g+1\leqslant |j-i|\leqslant g+LCP(i,j)$的后缀(i,j)的对数,即$\su ...
- web性能优化-浏览器渲染原理
在web性能优化-浏览器工作原理中讲到,浏览器渲染是在renderer process中完成的. 那我们来看下renderer process究竟干了什么? Renderer Process包含的线程 ...
- pom变成红橙色
今天发现自己POM变成了红橙色. 原因未知:看到上网有3~4种方法.尝试了一下都不行然后采用的换java jdk的方法,然后就解决了. 在设置中maven有几个属性. 1.改变java jre环境 也 ...
- 3DES加解密类
using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace GT.C ...