#include <iostream>
using namespace std;
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) {}
};
void printList(ListNode* head) {
while (head) {
cout << head->val << " ";
head = head->next;
}
cout << endl;
}
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int left, int right) {
if (!head || left == right) return head;
ListNode dummy(0);
dummy.next = head;
ListNode* prev = &dummy;
for (int i = 0; i < left - 1; i++) {
prev = prev->next;
}
ListNode* curr = prev->next;
ListNode* next = nullptr;
cout << "Initial list before reversing: ";
printList(dummy.next);
for (int i = 0; i < right - left; i++) {
next = curr->next;
curr->next = next->next;
next->next = prev->next;
prev->next = next;
cout << "After iteration " << i + 1 << ": ";
printList(dummy.next);
}
return dummy.next;
}
};
int main() {
ListNode* head = new ListNode(1);
head->next = new ListNode(2);
head->next->next = new ListNode(3);
head->next->next->next = new ListNode(4);
head->next->next->next->next = new ListNode(5);
int left = 2, right = 4;
Solution sol;
head = sol.reverseBetween(head, left, right);
cout << "Final reversed list: ";
printList(head);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IExpc3ROb2RlIHsKICAgIGludCB2YWw7CiAgICBMaXN0Tm9kZSAqbmV4dDsKICAgIExpc3ROb2RlKCkgOiB2YWwoMCksIG5leHQobnVsbHB0cikge30KICAgIExpc3ROb2RlKGludCB4KSA6IHZhbCh4KSwgbmV4dChudWxscHRyKSB7fQogICAgTGlzdE5vZGUoaW50IHgsIExpc3ROb2RlICpuZXh0KSA6IHZhbCh4KSwgbmV4dChuZXh0KSB7fQp9Owp2b2lkIHByaW50TGlzdChMaXN0Tm9kZSogaGVhZCkgewogICAgd2hpbGUgKGhlYWQpIHsKICAgICAgICBjb3V0IDw8IGhlYWQtPnZhbCA8PCAiICI7CiAgICAgICAgaGVhZCA9IGhlYWQtPm5leHQ7CiAgICB9CiAgICBjb3V0IDw8IGVuZGw7Cn0KCmNsYXNzIFNvbHV0aW9uIHsKcHVibGljOgogICAgTGlzdE5vZGUqIHJldmVyc2VCZXR3ZWVuKExpc3ROb2RlKiBoZWFkLCBpbnQgbGVmdCwgaW50IHJpZ2h0KSB7CiAgICAgICAgaWYgKCFoZWFkIHx8IGxlZnQgPT0gcmlnaHQpIHJldHVybiBoZWFkOwogICAgICAgIAogICAgICAgIExpc3ROb2RlIGR1bW15KDApOwogICAgICAgIGR1bW15Lm5leHQgPSBoZWFkOwogICAgICAgIExpc3ROb2RlKiBwcmV2ID0gJmR1bW15OwogICAgICAgIAogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVmdCAtIDE7IGkrKykgewogICAgICAgICAgICBwcmV2ID0gcHJldi0+bmV4dDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgTGlzdE5vZGUqIGN1cnIgPSBwcmV2LT5uZXh0OwogICAgICAgIExpc3ROb2RlKiBuZXh0ID0gbnVsbHB0cjsKICAgICAgICAKICAgICAgICBjb3V0IDw8ICJJbml0aWFsIGxpc3QgYmVmb3JlIHJldmVyc2luZzogIjsKICAgICAgICBwcmludExpc3QoZHVtbXkubmV4dCk7CiAgICAgICAgCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByaWdodCAtIGxlZnQ7IGkrKykgewogICAgICAgICAgICBuZXh0ID0gY3Vyci0+bmV4dDsKICAgICAgICAgICAgY3Vyci0+bmV4dCA9IG5leHQtPm5leHQ7CiAgICAgICAgICAgIG5leHQtPm5leHQgPSBwcmV2LT5uZXh0OwogICAgICAgICAgICBwcmV2LT5uZXh0ID0gbmV4dDsKICAgICAgICAgICAgCiAgICAgICAgICAgIGNvdXQgPDwgIkFmdGVyIGl0ZXJhdGlvbiAiIDw8IGkgKyAxIDw8ICI6ICI7CiAgICAgICAgICAgIHByaW50TGlzdChkdW1teS5uZXh0KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIGR1bW15Lm5leHQ7CiAgICB9Cn07CgoKCmludCBtYWluKCkgewogICAgTGlzdE5vZGUqIGhlYWQgPSBuZXcgTGlzdE5vZGUoMSk7CiAgICBoZWFkLT5uZXh0ID0gbmV3IExpc3ROb2RlKDIpOwogICAgaGVhZC0+bmV4dC0+bmV4dCA9IG5ldyBMaXN0Tm9kZSgzKTsKICAgIGhlYWQtPm5leHQtPm5leHQtPm5leHQgPSBuZXcgTGlzdE5vZGUoNCk7CiAgICBoZWFkLT5uZXh0LT5uZXh0LT5uZXh0LT5uZXh0ID0gbmV3IExpc3ROb2RlKDUpOwogICAgCiAgICBpbnQgbGVmdCA9IDIsIHJpZ2h0ID0gNDsKICAgIFNvbHV0aW9uIHNvbDsKICAgIGhlYWQgPSBzb2wucmV2ZXJzZUJldHdlZW4oaGVhZCwgbGVmdCwgcmlnaHQpOwogICAgCiAgICBjb3V0IDw8ICJGaW5hbCByZXZlcnNlZCBsaXN0OiAiOwogICAgcHJpbnRMaXN0KGhlYWQpOwogICAgCiAgICByZXR1cm4gMDsKfQo=