Reverse Linked List II

原创 2015年11月19日 23:56:36

题目: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->NULLm = 2 and n = 4,

return 1->4->3->2->5->NULL.

Note:
Given mn satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.

思路:

这一题比较巧妙,实际上是这样的一个循环:





如图所示,通过循环找到第m个,标记为f,f的下一个标记为t,f指向f 的next的next,s指向t,t 指向f.这是第一次,

然后呢,f 还是指向f 的next的next,slow 指向刚刚f 的next,也就是被标记的t ,如此一来,便完成循环。

代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverseBetween(ListNode* head, int m, int n) {
        /*ListNode *dummy=new ListNode(0);
        dummy->next = head;
        ListNode *slow = dummy;
        n -= m;
        while (--m)
            slow = slow->next;
        ListNode *fast = slow->next, *tmp;
        while (n--) {
            tmp = fast->next;
            fast->next = fast->next->next;
            tmp->next = slow->next;
            slow->next = tmp;
        }
        return dummy->next;*/
        
        ListNode *dummy=new ListNode(0);
        dummy->next=head;
        
        ListNode *slow=dummy;
        n=n-m;//这一句话不能够放在下面循环的后面,因为m变了。
        while(--m){
            slow=slow->next;//在m个之前的一个
        }
        
        ListNode *fast=slow->next,*tmp;
        while(n--){
            tmp=fast->next;
            fast->next=fast->next->next;
            
            tmp->next= slow->next;
            slow->next=tmp;
            //fast=slow->next;
        }
        return dummy->next;
    }
};


版权声明:本文为博主原创文章,未经博主允许不得转载。

Reverse Linked List II -- LeetCode

原题链接: http://oj.leetcode.com/problems/reverse-linked-list-ii/  这道题是比较常见的链表反转操作,不过不是反转整个链表,而是从m到n的一部...
  • linhuanmars
  • linhuanmars
  • 2014年04月28日 04:58
  • 13298

【LeetCode】Reverse Linked List II 解题报告

【题目】 Reverse a linked list from position m to n. Do it in-place and in one-pass. For example: Giv...
  • ljiabin
  • ljiabin
  • 2014年12月05日 15:59
  • 4225

LeetCode(92)ReverseLinkedList2

题目如下: Reverse a linked list from position m to n. Do it in-place and in one-pass. For example: Given...
  • feliciafay
  • feliciafay
  • 2014年01月28日 01:06
  • 2425

leetcode笔记--Reverse Linked List

前话:今天开始刷leetcode的第一道题,我所选用的语言是较为熟悉的python,其实自己似乎并没有一门十分精通的语言,在大学时候有系统学过c语言,但由于后面实践中实际上用的很少,现在很多特性都已经...
  • u010366748
  • u010366748
  • 2016年02月19日 13:39
  • 520

leetcode:92. Reverse Linked List II(Java)解答

转载请注明出处:z_zhaojun的博客 原文地址:http://blog.csdn.net/u012975705 题目地址:https://leetcode.com/problems/rever...
  • u012975705
  • u012975705
  • 2015年12月26日 16:14
  • 1807

206. Reverse Linked List [easy] (Python)

题目链接https://leetcode.com/problems/reverse-linked-list/题目原文 Reverse a singly linked list. 题目翻译翻转单向链...
  • coder_orz
  • coder_orz
  • 2016年05月03日 17:12
  • 2317

LeetCode 206. Reverse Linked List 题解(C++)

Reverse a singly linked list.
  • prayyojay
  • prayyojay
  • 2016年10月23日 16:18
  • 169

Leetcode解题-链表(2.2.2)ReverseLinkedList

题目:2.2.2 Reverse Linked List IIReverse a linked list from position m to n. Do it in-place and in one...
  • dc_726
  • dc_726
  • 2015年03月28日 11:17
  • 1835

[LeetCode]92.Reverse Linked List II

【题目】 Reverse a linked list from position m to n. Do it in-place and in one-pass. For example: Giv...
  • SunnyYoona
  • SunnyYoona
  • 2014年01月28日 11:06
  • 2655

[leetcode]Reverse Linked List II (反转链表值 C语言实现)

Reverse Linked List II Reverse a linked list from position m to n. Do it in-place and in one-pass....
  • sanmao0816
  • sanmao0816
  • 2015年04月18日 22:38
  • 702
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Reverse Linked List II
举报原因:
原因补充:

(最多只允许输入30个字)