首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >力扣经典150题第六十题:反转链表 II

力扣经典150题第六十题:反转链表 II

作者头像
用户8589624
发布2025-11-13 16:17:08
发布2025-11-13 16:17:08
20
举报
文章被收录于专栏:nginxnginx

标题:使用Java实现反转链表 II

在本文中,我们将解决LeetCode上的第六十题,即反转链表 II。题目要求给定一个单链表的头指针head和两个整数left和right,其中left <= right。我们需要反转从位置left到位置right的链表节点,并返回反转后的链表。

1. 题目分析

题目要求反转链表的一部分,这需要我们找到反转的起始位置和结束位置,然后对这一部分进行反转。同时,我们需要考虑边界情况,如链表为空、left等于right等情况。

2. 解题思路

我们可以使用三个指针来处理这个问题:pre、cur、next。具体步骤如下:

  • 首先,找到left位置的前一个节点pre和left位置的节点cur。
  • 然后,将left位置到right位置的节点反转。
  • 最后,将pre的next指针指向反转后的链表头节点,将反转区间的最后一个节点的next指针指向next节点。
3. Java代码实现
代码语言:javascript
复制
class ListNode {
    int val;
    ListNode next;

    ListNode(int val) {
        this.val = val;
    }
}

public class ReverseBetween {
    public ListNode reverseBetween(ListNode head, int left, int right) {
        if (head == null) return null;

        ListNode dummy = new ListNode(-1);
        dummy.next = head;
        ListNode pre = dummy;

        // 找到left位置的前一个节点pre
        for (int i = 0; i < left - 1; i++) {
            pre = pre.next;
        }

        ListNode cur = pre.next;
        ListNode next;

        // 反转left到right位置的节点
        for (int i = 0; i < right - left; i++) {
            next = cur.next;
            cur.next = next.next;
            next.next = pre.next;
            pre.next = next;
        }

        return dummy.next;
    }
}
4. 测试示例

我们使用几个示例来测试我们的代码:

代码语言:javascript
复制
public class Main {
    public static void main(String[] args) {
        // 示例1
        ListNode node1 = new ListNode(1);
        ListNode node2 = new ListNode(2);
        ListNode node3 = new ListNode(3);
        ListNode node4 = new ListNode(4);
        ListNode node5 = new ListNode(5);
        node1.next = node2; node2.next = node3; node3.next = node4; node4.next = node5;

        ReverseBetween solution = new ReverseBetween();
        ListNode reversedList1 = solution.reverseBetween(node1, 2, 4);
        printList(reversedList1);

        // 示例2
        ListNode node6 = new ListNode(5);
        ListNode reversedList2 = solution.reverseBetween(node6, 1, 1);
        printList(reversedList2);
    }

    public static void printList(ListNode head) {
        ListNode cur = head;
        while (cur != null) {
            System.out.print(cur.val + " ");
            cur = cur.next;
        }
        System.out.println();
    }
}
5. 总结

本文介绍了如何使用Java实现反转链表 II。通过使用三个指针,我们可以有效地反转链表的一部分,满足题目的要求。这是一道常见的链表问题,在面试中也经常会被考察到。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目分析
  • 2. 解题思路
  • 3. Java代码实现
  • 4. 测试示例
  • 5. 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档