leetcode 92. 反转链表 II-java实现

题目所属分类

链表题要画图
牢记翻转链表的迭代模板

原题链接

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

代码案例:leetcode 92. 反转链表 II-java实现_第1张图片

输入:head = [1,2,3,4,5], left = 2, right = 4
输出:[1,4,3,2,5]

题解

leetcode 92. 反转链表 II-java实现_第2张图片

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseBetween(ListNode head, int left, int right) {
        ListNode dummy = new ListNode(0);
        dummy.next = head ;
        ListNode p = dummy;
         
        for(int i = 0 ; i < left -1 ; i++) p = p.next;
         
        ListNode a = p  ; ListNode b = a.next; ListNode c = b.next ;
         for(int i = 0 ; i < right - left ; i++){
            ListNode  d = c.next ;
            c.next = b ;
            b = c;
            c = d ;
        }
        a.next.next = c ;
        a.next = b ;
        return dummy.next;
    }
}

你可能感兴趣的:(LeetCode,链表,leetcode,java)