题目
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。
示例 1:
输入:head = [1,2,3,4,5], left = 2, right = 4 输出:[1,4,3,2,5]
示例 2:
输入:head = [5], left = 1, right = 1 输出:[5]
解题
方法一:数组记录节点
/** * 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 left, int right) { vector<ListNode*> arr; ListNode* cur=head; while(cur){ arr.push_back(cur); cur=cur->next; } left--,right--; if(left==0){ head=arr[right]; }else{ arr[left-1]->next=arr[right]; } if(right==arr.size()-1){ arr[left]->next=nullptr; }else{ arr[left]->next=arr[right+1]; } for(int i=right;i>left;i--){ arr[i]->next=arr[i-1]; } return head; } };