思路:可以把需要反转的链表段拿出来进行反转,然后反转之后拼接进去。注意反转之后的头尾节点的拼接
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int m, int n) {
// write code here
ListNode* temp = new ListNode(0);
temp->next = head;
ListNode* left = temp;
//left为前段不反转的最后一个节点
for(int i = 0; i<m-1; i++){
left = left->next;
}
ListNode* right = left;
//right为反转区间的最后一个节点
for(int i = 0; i<n-m+1; i++){
right = right->next;
}
//leftNode为反转区间的第一个节点