1. 题目描述
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL
2. 解题思路
这个题最主要的就是将第m到n的节点进行饭反转,然后将m-1节点指向n,让n+1节点指向m,这样就实现了链表的局部反转。
3. 代码实现
/*** 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 dummy = new ListNode()dummy.next = head// 寻找第m-1节点let p = dummyfor(let i =0; i<m-1; i++){p= p.next}// 定义当前节点和前驱节点,当前节点指向m节点let pre = nulllet cur = p.next// 将m到n的节点进行反转for(let i = 0; i<= n-m; i++){let next = cur.nextcur.next = prepre = curcur = next}// 将反转的局部链表和原链表进行拼接p.next.next = curp.next = prereturn dummy.next};
4. 提交结果

