lintcode-36-翻转链表 II
36-翻转链表 II
翻转链表中第m个节点到第n个节点的部分
注意事项
m,n满足1 ≤ m ≤ n ≤ 链表长度
样例
给出链表1->2->3->4->5->null, m = 2 和n = 4,返回1->4->3->2->5->null
挑战
在原地一次翻转完成
标签
链表
思路
借助2个空的节点,置于链表头部,一次遍历链表,找到翻转子链尾部subEnd,不翻转子链尾部lastEnd,头部nextHead,以及当前节点nowNode,在遍历时,将nowNode插入lastEnd与subEnd之间。最后,将翻转子链与nextHead相连。
code
/**
* Definition of singly-linked-list:
*
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param head: The head of linked list.
* @param m: The start position need to reverse.
* @param n: The end position need to reverse.
* @return: The new head of partial reversed linked list.
*/
ListNode *reverseBetween(ListNode *head, int m, int n) {
// write your code here
ListNode newHead1(-1), newHead2(-1);
newHead1.next = &newHead2;
newHead2.next = head;
ListNode *nowNode=head, *subHead=head, *subEnd=NULL, *lastEnd=&newHead1, *nextHead=NULL;
int i=1;
while(nowNode != NULL) {
if(i <= m) {
lastEnd = lastEnd->next;
subEnd = nowNode;
nextHead = nowNode;
nowNode = nowNode->next;
i++;
}
else if(i <= n) {
ListNode *temp = nowNode->next;
nextHead->next = NULL;
lastEnd->next = nowNode;
lastEnd->next->next = subEnd;
subEnd = nowNode;
nowNode = temp;
i++;
}
else {
nextHead->next = nowNode;
break;
}
}
if(m == 1) {
return lastEnd->next;
}
else {
return head;
}
}
};
lintcode-36-翻转链表 II的更多相关文章
- lintcode 中等题: reverse linked list II 翻转链表II
题目 翻转链表 II 翻转链表中第m个节点到第n个节点的部分 样例 给出链表1->2->3->4->5->null, m = 2 和n = 4,返回1->4-> ...
- lintcode: 翻转链表
题目: 翻转链表 翻转一个链表 样例 给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null 挑战 在原地一次翻转完成 解题: 递归还 ...
- 92. Reverse Linked List II 翻转链表II
Reverse a linked list from position m to n. Do it in one-pass. Note: 1 ≤ m ≤ n ≤ length of list. Exa ...
- LeetCode 92 | 大公司常考的面试题,翻转链表当中指定部分
今天是LeetCode专题的第58篇文章,我们一起来看看LeetCode 92题,翻转链表II(Reverse LInked List II). 这题的官方难度是Medium,2451个赞同,145个 ...
- [LintCode] Reverse Nodes in k-Group 每k个一组翻转链表
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If ...
- [LeetCode系列]翻转链表问题II
给定一个链表和两个整数m, n, 翻转链表第m个节点到第n个节点(从1开始计数). 如, 给定链表: 1->2->3->4->5->NULL, 以及 m = 2, n = ...
- [LeetCode] Reverse Nodes in k-Group 每k个一组翻转链表
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If ...
- C语言递归,非递归实现翻转链表
翻转链表作为,链表的常用操作,也是面试常遇到的. 分析非递归分析: 非递归用的小技巧比较多,很容易出错. 递归分析比较简单,在代码里面 代码: #include<stdio.h> #inc ...
- 025k个一组翻转链表
#include "000库函数.h" struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), n ...
随机推荐
- js实现所有异步请求全部加载完毕后,loading效果消失
在实际开发中,一定有情况是这样的,一个页面我们有多个地方请求了ajax,在这种情况下,我们要实现数据没来之前出现我们炫酷的loading效果,而且要等到所有的ajax都请求完毕后,才让我们的loadi ...
- php无限级分类----封装函数
public function catetree($cateRes){//传递过来的数据资源 return $this->sort($cateRes); 调用函数 } public functi ...
- opencv3 学习五 - 合并与分割通道
合并与分割通道 程序如下 #include "opencv2/opencv.hpp" using namespace cv; int main() { Mat original = ...
- java 优化版 用接口实现(输入两个数选择实现加减乘除运算)
//利用java接口实现计算器,实现加减乘除的功能 import java.util.Scanner; class Test { public static void main(String[] ar ...
- 分布式专题(一)——Zookeeper简介
什么是Zookeeper: CAP原理&Zookeeper数据的一致性: Zookeeper的集群架构: Zookeeper的客户端会话: Zookeeper的数据节点: Zookeeper的 ...
- CDH集群搭建视频教程 百度云网盘下载
CDH集群搭建视频教程 百度云网盘下载 链接: http://pan.baidu.com/s/1i5DVBlb 密码:2mny
- 关于 logger
日志 前言 我是一名后台程序员,接触后台只有一年时间,在这期间一共做过四个项目,分别是: 工作室招新系统 视频学习网站 创客网站 打印机项目 由于之前做项目的时候没有好好重视日志,所以导致在开发与维护 ...
- 6月29-7月5日成都uber优步司机第一/二/三组奖励政策明细
成都优步司机第一/二/三组奖励更新了,在写下文之前,我先吐槽一下:靠优步uber发财致富已成往事. 滴滴快车单单2.5倍,注册地址:http://www.udache.com/如何注册Uber司机(全 ...
- 成都Uber优步司机奖励政策(2月20日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 成都Uber优步司机奖励政策(1月27日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...