92. 反转链表 II

自己做
解:头插与尾插

/*** 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) {ListNode* head1 = new ListNode();ListNode* head2 = new ListNode();ListNode *p1_end = head1, *p2_begin = head2, *p2_end = head2;ListNode* q = head;//第一部分尾插for(int i = 1; i < left; i++){head = head->next; //取出结点q->next = nullptr; p1_end->next = q;p1_end = p1_end->next;q = head;}//第二部分头插for(int i = left; i <= right && head != nullptr; i++){head = head->next; //取出结点head2->next = q;q->next = p2_begin;p2_begin = q;q = head;if(i == left)p2_end = p2_begin;}//拼接p1_end->next = p2_begin;p2_end->next = head;head = head1->next;return head;}
};
