【C++】【LeetCode】92. Reverse Linked List II

xiaoxiao2021-02-28  128

题目

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

思路

用数组存储要倒置的节点的值,遍历一遍链表,然后将要倒置的存下来,然后使用之前记录的开始倒置的节点更替节点值。

代码

/** * 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) { if (m >= n) { return head; } else if (m <= 0) { n = n + (1 - m); m = 1; } int i = 1; ListNode *index = head; vector<int> subArray; while (i < m) { if (index->next == NULL) { return head; } else { index = index->next; i++; } } ListNode *preIndex = index; while (i <= n) { if (index == NULL) { break; } subArray.push_back(index->val); index = index->next; i++; } for (int j = subArray.size() - 1; j >= 0; j--) { preIndex->val = subArray[j]; preIndex = preIndex->next; } return head; } };
转载请注明原文地址: https://www.6miu.com/read-26491.html

最新回复(0)