92. 反转链表 II

Posted kennyoooo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了92. 反转链表 II相关的知识,希望对你有一定的参考价值。

92. 反转链表 II

https://leetcode-cn.com/problems/reverse-linked-list-ii/

难度 完成日期 耗时 提交次数
中等 2020-1-16 1小时 1

问题描述

反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。

说明:
1 ≤ m ≤ n ≤ 链表长度。

示例:

输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL

解题思路

普通方法

ListNode* reverseBetween(ListNode* head, int m, int n) {
    ListNode *_head = head;
    int count = n - m + 1;
    ListNode *former;
    if (m == 1) {
        former = nullptr;
    } else {
        for (int i = 0 ; i < m - 2; i++) {
            head = head->next;
        }
        former = head;
        head = head->next;
    }
    int data[count];
    for (int i = 0; i < count; i++) {
        data[i] = head->val;
        head = head->next;
    }
    ListNode *reverse = new ListNode(0);
    ListNode *reverseH = reverse;
    for (int i = 0; i < count; i++) {
        ListNode *temp = new ListNode(data[count - i - 1]);
        reverse->next = temp;
        reverse = reverse->next;
    }
    reverse->next = head;
    if (m == 1) {
        return reverseH->next;
    } else {
        former->next = reverseH->next;
        return _head;
    }
}

一次遍历中把位置 m 到 n 中的所有数据保存,再重新组成链表接在前一个链表结尾,再将原链表未遍历部分接在新的链表尾部。

以上是关于92. 反转链表 II的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode92. 反转链表 II

Leetcode92. 反转链表 II

Leetcode92. 反转链表 II(JAVA头插法)

头插法LeetCode 92. 反转链表 II

leetcode 92. 反转链表 II

92. 反转链表 II