题目描述:

给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。

解析:

图片说明

Java:

public ListNode reverseBetween(ListNode head, int left, int right) {
        ListNode prev = null;
        ListNode curr = head;
        ListNode next = head;
        for(int i = 1; i < left; i++) {
            prev = curr;
            curr = curr.next;
        }
        ListNode prev2 = prev;
        ListNode curr2 = curr;
        for(int i = left; i <= right; i++) {
            next = curr.next;
            curr.next = prev;
            prev = curr;
            curr = next;
        }
        if(prev2 != null) {
            prev2.next = prev;
        } else {
            head = prev;
        }
        curr2.next = curr;
        return head;
    }

JavaScript:

var reverseBetween = function(head, left, right) {
    let prev = null;
    let curr = head;
    for(let i = 1; i < left; i++) {
        prev = curr;
        curr = curr.next;
    }
    let prev2 = prev;
    let curr2 = curr;
    for(let i = left; i <= right; i++) {
        next = curr.next;
        curr.next = prev;
        prev = curr;
        curr = next;
    }
    if(prev2 !== null) {
        prev2.next = prev;
    } else {
        head = prev;
    }
    curr2.next = curr;
    return head;
};