【力扣】_92反转链表II

package Leetcode真题分门别类.链表;

/**
 * @Author bennyrhys
 * @Date 2020-05-29 15:39
 * 思想:
 * 链表翻转,直接改变指针指向 反转n-m次
 * head表示需要反转的头节点,pre表示需要反转头节点的前驱节点
 * 保存状态需要创建三个指针(pre前 cur当前 next下一个)
 * 将head的next节点移动到需要反转链表部分的首部
 * 第一次反转:1(head) 2(next) 3 4 5 反转为 2 1 3 4 5
 * 第二次反转:2 1(head) 3(next) 4 5 反转为 3 2 1 4 5
 * 第三次发转:3 2 1(head) 4(next) 5 反转为 4 3 2 1 5
 * 第四次反转:4 3 2 1(head) 5(next) 反转为 5 4 3 2 1
 *
 * 复杂度:
 * 时间O(N)
 * 空间O(1)
 *
 * 注意:
 * n,m范围
 */
public class _92反转链表II {
    public ListNode reverseBetween(ListNode head, int m, int n) {
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        ListNode prev = dummy;
        while (m > 1) {
            prev = prev.next;
            m--;
            n--;
        }
        head = prev.next;
        while (n > 1) {
            ListNode next = head.next;
            head.next = head.next.next;
            next.next = prev.next;
            prev.next = next;
            n--;
        }
        return dummy.next;
    }
}
瑞 新 CSDN认证博客专家 分布式 Java 架构
求职中 • Java全栈养成计划
公众号 • 让我遇见相似的灵魂
回复领取:竞赛 书籍 项目 面试

左手代码,右手吉他,这就是天下:如果有一天我遇见相似的灵魂 那它肯定是步履艰难 不被理解 喜黑怕光的。如果可以的话 让我触摸一下吧 它也一样孤独得太久。 不一样的文艺青年,不一样的程序猿。
相关推荐
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页