image.png

题解

迭代版

  1. /**
  2. * Definition for singly-linked list.
  3. * class ListNode {
  4. * val: number
  5. * next: ListNode | null
  6. * constructor(val?: number, next?: ListNode | null) {
  7. * this.val = (val===undefined ? 0 : val)
  8. * this.next = (next===undefined ? null : next)
  9. * }
  10. * }
  11. */
  12. function reverseBetween(head: ListNode | null, m: number, n: number): ListNode | null {
  13. if (!head) return null;
  14. let target = head;
  15. let pre = null;
  16. while (m > 1) {
  17. pre = target;
  18. target = target.next;
  19. m--;
  20. n--;
  21. }
  22. let a = pre;
  23. let b = target;
  24. while (n) {
  25. let temp = target.next;
  26. target.next = pre;
  27. pre = target;
  28. target = temp;
  29. n--;
  30. }
  31. if (a) {
  32. a.next = pre;
  33. } else {
  34. head = pre;
  35. }
  36. b.next = target;
  37. return head;
  38. };

递归版