【leetcode】Reverse Linked List II (middle)
Reverse a linked list from position m to n. Do it in-place and in one-pass.
For example:
Given 1->2->3->4->5->NULL, m = 2 and n = 4,
return 1->4->3->2->5->NULL.
思路:
好困啊,脑子晕晕的。 转了半天AC了。但写的很罗嗦,要学习大神的写法。 注意翻转的写法。
用伪头部
大神14行简洁代码
 ListNode *reverseBetween(ListNode *head, int m, int n) {
    if(m==n)return head;
    n-=m;
    ListNode prehead();
    prehead.next=head;
    ListNode* pre=&prehead;
    while(--m)pre=pre->next;
    ListNode* pstart=pre->next;
    while(n--)
    {
        ListNode *p=pstart->next;
        pstart->next=p->next;
        p->next=pre->next;
        pre->next=p;
    }
    return prehead.next;
}
我的繁琐代码
ListNode *reverseBetween(ListNode *head, int m, int n) {
        ListNode fakehead();
        ListNode * p = &fakehead;
        for(int i = ; i < m; i++)
        {
            p = p->next = head;
            head = head->next;
        }
        p->next = NULL; //m前的那一节末尾
        ListNode *ptail = head; //翻转那一段的尾巴
        ListNode *p1 = head, *p2 = NULL, *p3 = NULL;
        if(p1->next != NULL)
        {
            p2 = p1->next;
        }
        p1->next = NULL;
        for(int i = m; i < n; i++)
        {
            p3 = p2->next;
            p2->next = p1;
            p1 = p2;
            p2 = p3;
        }
        p->next = p1;
        ptail->next = p2;
        return fakehead.next;
    }
【leetcode】Reverse Linked List II (middle)的更多相关文章
- 【leetcode】Path Sum I & II(middle)
		Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ... 
- 【leetcode】Reverse Linked List II
		Reverse Linked List II Reverse a linked list from position m to n. Do it in-place and in one-pass. F ... 
- 【leetcode】Reverse Nodes in k-Group (hard)☆
		Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If ... 
- 【leetcode】Remove Linked List Elements(easy)
		Remove all elements from a linked list of integers that have value val. ExampleGiven: 1 --> 2 --& ... 
- leetcode 之Reverse Linked List II(15)
		这题用需要非常细心,用头插法移动需要考虑先移动哪个,只需三个指针即可. ListNode *reverseList(ListNode *head, int m, int n) { ListNode d ... 
- 【leetcode】Swap Nodes in Pairs (middle)
		Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2-&g ... 
- 【leetcode】Search for a Range(middle)
		Given a sorted array of integers, find the starting and ending position of a given target value. You ... 
- 【leetcode】Binary Search Tree Iterator(middle)
		Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the ro ... 
- 【leetcode】Validate Binary Search Tree(middle)
		Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as ... 
随机推荐
- edwin报警和监控平台开源了(python源码)
			简单介绍一下edwin edwin是一个报警和监控平台, 可以使用它监控任意东西, 如有异常(分为警告级和严重级), 可以发出报警. 可以自定义报警的通知方式, 比如邮件/短信/电话. 另外, 它提供 ... 
- 详解SESSION与COOKIE的区别
			在PHP面试中 经常碰到请阐述session与cookie的区别与联系,以及如何修改两者的有效时间. 大家都知道,session是存储在服务器端的,cookie是存储在客户端的,session依赖于c ... 
- spring 缓存(spring自带Cache)(入门)
			spring的缓存机制,是方法纬度的缓存机制, 这就意味着我们并不用关注 底层是否使用了数据库以及通过什么方式访问的数据库: 因此,此缓存方法既适用于dao层,也适用于service层. spring ... 
- hadoop 之 kafka 安装与 flume -> kafka 整合
			62-kafka 安装 : flume 整合 kafka 一.kafka 安装 1.下载 http://kafka.apache.org/downloads.html 2. 解压 tar -zxvf ... 
- 随鼠标移动tab
			<script language="javascript"> function tabChange(obj, id) { var ... 
- BZOJ4514——[Sdoi2016]数字配对
			有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两个数字 ai.aj 满足,ai 是 aj 的倍数,且 ai/aj 是一个质数, 那么这两个数字可以配对,并获得 ci×cj 的 ... 
- 观察者(Observer)模式
			http://www.cnblogs.com/zhenyulu/articles/73723.html 一. 观察者(Observer)模式 观察者模式又叫做发布-订阅(Publish/Subscri ... 
- c++ 操作符重载和友元
			操作符重载(operator overloading)是C++中的一种多态,C++允许用户自定义函数名称相同但参数列表不同的函数,这被称为函数重载或函数多态.操作符重载函数的格式一般为: operat ... 
- python\c交互学习网站手机
			http://use-python.readthedocs.org/zh_CN/latest/interact_with_other_language.html https://www.zhihu.c ... 
- Java工程为什么要加一个biz层
			biz是Business的缩写,实际上就是控制层(业务逻辑层).解释:控制层的主要作用就是协调model层和view层直接的调用和转换.能够有效的避免请求直接进行数据库内容调用,而忽略了逻辑处理的部分 ... 
