[leetcode] 【链表】92. Reverse Linked List II

原创 2016年05月30日 15:40:10

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.


题意

翻转制定位置的链表节点。比如 1->2->3->4->5->NULLm = 2 and n = 4,
要翻转第二到第四个节点  即把2->3->4翻转   成4->3->2
得到1->4->3->2->5->NULL
要求:不使用额外空间,并且遍历一遍完成。

题解

因为要不适用额外空间,并且一次完成,增加了不小的难度。
下面是我自己做的示意图,第一条原始数据,prev指针指向要翻转的第一个节点,cur指针指向prev的下一个元素

第一步   prev->next=cur->next
第二步   cuir->next=head->next
第三部   head->next=cur;
这样一轮翻转完成,cur指向新的prev->next。然后采取同样的步骤进行翻转,反转次数为n-m。
注意,我这里的head不是链表头,而是第m个节点的父节点。所以做题的时候得添加一个临时父节点以防边界问题出现。

/**
 * 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 temp_head(-1);
        ListNode *prev=&temp_head;
        temp_head.next=head;
        for(int i=0;i<m-1;i++)
            prev=prev->next;
        ListNode *newhead=prev;
        prev=newhead->next;
        ListNode *cur=prev->next;
        for(int i=0;i<n-m;i++)
        {
            prev->next=cur->next;
            cur->next=newhead->next;
            newhead->next=cur;
            cur=prev->next;
        }
        return temp_head.next;
    }
};



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

leetcode206/92---Reverse Linked List I/II(反转链表)

问题描述:Reverse a singly linked list. A linked list can be reversed either iteratively or recursively....
  • will130
  • will130
  • 2016年01月13日 15:09
  • 587

[LeetCode-92] Reverse Linked List II(反转指定区间链表)

【分析】反转链表,但不是从头到尾的反转,给定了一个[m,n]范围,反转指定区间的链表。1 ≤ m ≤ n ≤ length of list.不满足条件的话,返回原链表...

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->2...

【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: Given 1...

LeetCode --- 92. Reverse Linked List II

题目链接:Reverse Linked List II Reverse a linked list from position m to n. Do it in-place and in one-p...
  • makuiyu
  • makuiyu
  • 2015年04月09日 10:50
  • 458

[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: Given 1->2-...

( Leetcode 92 ) Reverse Linked List II

题目: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

1. 题目描述 Reverse a linked list from position m to n. Do it in-place and in one-pass. For examp...

leetcode No92. Reverse Linked List II

Question: Reverse a linked list from position m to n. Do it in-place and in one-pass. For exam...

LeetCode 92. Reverse Linked List II ***** 虚拟头结点

题目 题意 注意 思路 代码题目 Reverse a linked list from position m to n. Do it in-place and in one-pass. ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[leetcode] 【链表】92. Reverse Linked List II
举报原因:
原因补充:

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