您的位置:首页 > 编程语言 > C语言/C++

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

2017-08-05 15:43 405 查看

题目

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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode