Leetcode 92. Reverse Linked List II Java版

本文深入解析了链表在指定区间[m,n]内进行反转的算法实现,通过使用辅助节点简化边界处理,详细阐述了如何在不改变链表其余部分的情况下,仅反转指定区间的节点,并提供完整的代码示例及运行逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解题思路:在指定范围内进行链表反转,只需在m-n范围内进行反转,然后连上m-1与n+1节点就可以。

代码如下:


class Solution {
    public ListNode reverseBetween(ListNode head, int m, int n) {
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        ListNode preNode = dummy;
        for(int i=1;i<m;i++)
            preNode = preNode.next;
        ListNode pre = null,cur = preNode.next;
        while(cur!=null && m<=n){
            ListNode next = cur.next;
            cur.next = pre;
            pre = cur;
            cur = next;
            m++;
        }
        preNode.next.next = cur;
        preNode.next = pre;
        return dummy.next;
    }
}

源码分析

  1. 处理异常
  2. 使用dummy辅助节点
  3. 找到premNode——m节点之前的一个节点
  4. 以nNode和postnNode进行遍历翻转,注意考虑在遍历到n之前postnNode可能为空
  5. 连接premNode和nNode,premNode->next = nNode;
  6. 连接mNode和postnNode,mNode->next = postnNode;

务必注意node 和node->next的区别!!,node指代节点,而node->next指代节点的下一连接。

参考:https://www.kancloud.cn/kancloud/data-structure-and-algorithm-notes/73012

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值