码迷,mamicode.com
首页 > 其他好文 > 详细

92. 反转链表 II

时间:2020-01-16 22:16:54      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:部分   lin   The   rev   ref   class   解题思路   tps   list   

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

标签:部分   lin   The   rev   ref   class   解题思路   tps   list   

原文地址:https://www.cnblogs.com/kennyoooo/p/12203168.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!