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;
}
}
【力扣】_92反转链表II
原创
©著作权归作者所有:来自51CTO博客作者瑞新的博客的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:【力扣】_206反转链表
下一篇:【力扣】_217存在重复元素
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【LeetCode 92】反转链表 II
题目描述反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例
链表 算法 leetcode javascript i++ -
【LeetCode 92.】 反转链表 II
尽可能抽象问题,然后简化代码。同时需要注意,while循环里面的条件值要切记不能随着while循环而变化了!写代码要时刻小心!
leetcode 链表 算法 sed d3