https://leetcode-cn.com/problems/reverse-linked-list-ii/
题目
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。
示例
输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL
解答
答案
/*** Definition for singly-linked list.* function ListNode(val) {* this.val = val;* this.next = null;* }*//*** @param {ListNode} head* @param {number} m* @param {number} n* @return {ListNode}*/var reverseBetween = function(head, m, n) {let prev = nulllet curr = head// 移动需要反转的指针for(let i=1;i<m;i++) {prev = currcurr = curr.next}// 标记指针let prev2 = prevlet curr2 = curr// 遍历m到n的节点进行反转for(let i=m;i<=n;i++) {// next = curr.next// curr.next = prev// prev = curr// curr = next[curr.next, prev, curr] = [prev, curr, curr.next]}// m > 1,反转开始节点在链表中间if(prev2 !== null) {prev2.next = prev// 反转开始节点在链表开头}else {head = prev}curr2.next = currreturn head};

