【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.
For example:
Given1->2->3->4->5->NULL, m = 2 and n = 4,return
1->4->3->2->5->NULL.Note:
Given m, n satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.
题目意思:
翻转给定区间[m,n]的链表。
第一个节点m=1。
1<=m<=n<=length。
解题思路:
就我目前学习到的,有用指向指针的指针的,有插入,有逆转的。但是所有方法的核心,都其实是一个算法,就是利用3个指针修改区间内的节点的next值,且要保证已修改的链表是可以被找到的,即可以连入原链表中。
假设有一个链表有1,2,3,4,5,6,6个节点。m=2,n=5。
我们添加一个dummy节点,方便操作第一个节点。

首先让pre指向第m个节点前面那个,cur指向第m个节点,p1指向m的下一个节点,因为p1有可能是NULL,所以当p1不是NULL的时候,p2指向p1的下一个节点。
上图画出了这几个指针指向情况的开始状态和我们希望的终止状态。
在最终状态下,再通过其中方框中的两步就可以我们需要的链表了。
而cur,p1,p2三个指针在区间内向前移动并且将p1的next指向cur的过程则包含在一个for循环内部。如下:

代码如下:
 class Solution {
 public:
     ListNode *reverseBetween(ListNode *head, int m, int n) {
         ListNode *dummy = new ListNode();
         dummy->next = head;
         ListNode *pre = dummy, *cur = head;
         for(int i = ; i < m; i++){
             pre = cur;
             cur = cur->next;
         }
         ListNode *p1,*p2;
         if(cur)
             p1 = cur->next;
         if(p1)
             p2 = p1->next;
         for(int j = m; j < n; j++){
             p1->next = cur;
             cur = p1;
             p1 = p2;
             if(p2) p2 = p2->next;
         }
         pre->next->next = p1;
         pre->next = cur;
         return dummy->next;
     }
 };
【LeetCode练习题】Reverse Linked List II的更多相关文章
- 【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 -day30  Reverse Linked List II
		1.  Reverse Linked List II Reverse a linked list from position m to n. Do it in-place and in one- ... 
- [LeetCode] 92. Reverse Linked List II 反向链表II
		Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1-> ... 
- Java for LeetCode 092 Reverse Linked List II
		Reverse a linked list from position m to n. Do it in-place and in one-pass. For example: Given 1-> ... 
- [LeetCode] 92. Reverse Linked List II 倒置链表之二
		Reverse a linked list from position m to n. Do it in one-pass. Note: 1 ≤ m ≤ n ≤ length of list. Exa ... 
- 【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-> ... 
- leetcode 92  Reverse Linked List II ----- java
		Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1-> ... 
- leetcode:Reverse Linked List II
		Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1-> ... 
- LeetCode 92. Reverse Linked List II倒置链表2 C++
		Reverse a linked list from position m to n. Do it in one-pass. Note: 1 ≤ m ≤ n ≤ length of list. Exa ... 
- [leetcode]92. Reverse Linked List II反转链表2
		Reverse a linked list from position m to n. Do it in one-pass. Note: 1 ≤ m ≤ n ≤ length of list. Exa ... 
随机推荐
- HDU 1104 Remainder (BFS)
			题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1104 题意:给你一个n.m.k,有四种操作n+m,n-m,n*m,n%m,问你最少经过多少步,使得最后 ... 
- 开源欣赏wordpress之intall.php
			引导式安装 $weblog_title = isset( $_POST['weblog_title'] ) ? trim( wp_unslash( $_POST['weblog_title'] ) ) ... 
- Windows XP SP3中远程桌面实现多用户登陆
			Windows XP SP3配置为支持多用户远程桌面连接,注意:此多用户远程桌面连接必须是不同的用户登录,不能像Windows server 2003那样,同一个用户可以同时登录,只能登陆2个不同用户 ... 
- UESTC_酱神寻宝 2015 UESTC Training for Dynamic Programming<Problem O>
			O - 酱神寻宝 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ... 
- Triangle 解答
			Question Given a triangle, find the minimum path sum from top to bottom. Each step you may move to a ... 
- C语言调用库函数实现生产者消费者问题
			#include<stdio.h> #include<stdlib.h> #include<semaphore.h> #include<pthread.h&g ... 
- live555 源代码简单分析1:主程序
			live555是使用十分广泛的开源流媒体服务器,之前也看过其他人写的live555的学习笔记,在这里自己简单总结下. live555源代码有以下几个明显的特点: 1.头文件是.hh后缀的,但没觉得和. ... 
- poj 3411 Paid Roads(dfs)
			Description A network of m roads connects N cities (numbered to N). There may be more than one road ... 
- 所闻所获5:关于iOS的证书
			去年做ondine时,被iOS的证书搞得很是头大,做完了之后感觉一片混乱,印象也不是很深.最近又发布了meditashayne,个人的第二个App,也就重温了一下证书的一些相关操作.这一次的理解比较深 ... 
- C# 移动端与PC端的数据交互
			小记:针对目前功能越来越强大的智能手机来说,在PC端支持对手机中的用户数据作同步.备份以及恢复等保护措施的应用已经急需完善.不仅要对数据作保护,而且用户更希望自己的手机跟PC能够一体化,以及和远程服务 ... 
