fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct ListNode {
  5. int val;
  6. ListNode *next;
  7. ListNode() : val(0), next(nullptr) {}
  8. ListNode(int x) : val(x), next(nullptr) {}
  9. ListNode(int x, ListNode *next) : val(x), next(next) {}
  10. };
  11.  
  12. void printList(ListNode* head) {
  13. while (head) {
  14. cout << head->val << " ";
  15. head = head->next;
  16. }
  17. cout << endl;
  18. }
  19.  
  20. class Solution {
  21. public:
  22. ListNode* reverseBetween(ListNode* head, int left, int right) {
  23. if (!head || left == right) return head;
  24.  
  25. ListNode dummy(0);
  26. dummy.next = head;
  27. ListNode* prev = &dummy;
  28.  
  29. for (int i = 0; i < left - 1; i++) {
  30. prev = prev->next;
  31. }
  32.  
  33. ListNode* curr = prev->next;
  34. ListNode* next = nullptr;
  35.  
  36. cout << "Initial list before reversing: ";
  37. printList(dummy.next);
  38. // cout << "Current: " << curr->val << " Next: "<<next->val<<" Prev: "<<prev->val<<endl;
  39.  
  40. for (int i = 0; i < right - left; i++) {
  41. next = curr->next;
  42. curr->next = next->next;
  43. next->next = prev->next;
  44. prev->next = next;
  45.  
  46. cout << "After iteration " << i + 1 << ": ";
  47. cout << "Current: " << curr->val << " Next: "<<next->val<<" Prev: "<<prev->val<<endl;
  48. printList(dummy.next);
  49. }
  50.  
  51. return dummy.next;
  52. }
  53. };
  54.  
  55.  
  56.  
  57. int main() {
  58. ListNode* head = new ListNode(1);
  59. head->next = new ListNode(2);
  60. head->next->next = new ListNode(3);
  61. head->next->next->next = new ListNode(4);
  62. head->next->next->next->next = new ListNode(5);
  63.  
  64. int left = 2, right = 4;
  65. Solution sol;
  66. head = sol.reverseBetween(head, left, right);
  67.  
  68. cout << "Final reversed list: ";
  69. printList(head);
  70.  
  71. return 0;
  72. }
  73.  
Success #stdin #stdout 0.01s 5280KB
stdin
Standard input is empty
stdout
Initial list before reversing: 1 2 3 4 5 
After iteration 1: Current: 2 Next: 3 Prev: 1
1 3 2 4 5 
After iteration 2: Current: 2 Next: 4 Prev: 1
1 4 3 2 5 
Final reversed list: 1 4 3 2 5