day5:92. 反转链表 II

这道题目是反转链表的升级版,难点在于局部反转后的链表指向,以反转下图中2-3-4为例:

从图中可以看出,除了区间的指针需要改变,区间的前驱节点指向和后继节点的被指向也要变化

为了确保前驱节点不为空,加入dummy虚拟节点,指向列表头节点

代码实现:

```js

/**

* @param {ListNode} head

* @param {number} left

* @param {number} right

* @return {ListNode}

*/

var reverseBetween = function(head, left, right) {

let dummy = new ListNode(0,head);

let pre = dummy;

for(let i=1;i<left;i++){

pre = pre.next;

}

let cur = pre.next;

for(let i=0;i<right-left;i++){

const next = cur.next;

cur.next = next.next;

next.next = pre.next;

pre.next = next;

}

return dummy.next;

};

```

头插法图示:

const next = cur.next;

cur.next = next.next;

next.next = pre.next;

pre.next = next;

注意几个点:

1. pre和cur的指向是固定的,next每次变化;

2. 每次循环要改变三个节点的指向,先改变cur,再改变next,最后是pre

本题的 "头插法",是迭代法针对 "局部反转" 场景的适配版本------ 本质都是通过循环(迭代)调整指针,只是操作方式更贴合 "局部反转" 的需求。

相关推荐
念越1 小时前
题库、练习与错题本代码阅读
开发语言·数据结构
垆边人似月.2 小时前
华为题:盛最多水的容器
数据结构·算法
HPtiger2 小时前
数据结构——插入排序
数据结构·排序算法
All for pursuit.2 小时前
【动态规划-11】279.完全平方数
数据结构·c++·算法·leetcode·动态规划
Logic1013 小时前
C语言/数据结构位运算题解:异或XOR找出套碗游戏中的“幸运碗“——只出现一次的数字
c语言·数据结构·算法·数组·位运算·时间复杂度·空间复杂度
y1su4 小时前
Leetcode 单调栈模板
java·开发语言·数据结构·算法·leetcode
一只旭宝4 小时前
树的家族全景:从二叉树到 B+ 树
数据结构
垆边人似月.4 小时前
华为题:每日温度
数据结构·c++·算法
Peregrine94 小时前
数据结构 - > 树和二叉树
数据结构·算法
j7~4 小时前
【算法】专题四.前缀和:一维二维模板,配套 LeetCode 真题,结合同余定理、哈希前缀和,搞定子数组与子矩阵区间求和问题。
数据结构·c++·算法·前缀和·优选算法