栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

[剑指offer专项突击版-Java解法]剑指 Offer II 026. 重排链表

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[剑指offer专项突击版-Java解法]剑指 Offer II 026. 重排链表

剑指 Offer II 026. 重排链表 题目描述

给定一个单链表 L 的头节点 head ,单链表 L 表示为:

L0 → L1 → … → Ln-1 → Ln
请将其重新排列后变为:

L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …

不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例 1:

输入: head = [1,2,3,4]
输出: [1,4,2,3]
示例 2:

输入: head = [1,2,3,4,5]
输出: [1,5,2,4,3]

提示:

  • 链表的长度范围为 [1, 5 * 104]
  • 1 <= node.val <= 1000
思路解析

1.根据题意,需要做三件事

2.第一件事,需要找到链表的中点,然后切割链表,我们想到快慢指针

3.第二件事,翻转第二个链表,我们想到反转链表

4.第三件事,合并两个链表,我这里使用插入的方式进行合并,把第二个链表插入到第一个链表中

代码实现
class Solution {
    public void reorderList(ListNode head) {
        // 找到链表重点,分成两段
        ListNode pre = findMid(head);
        // 拆分
        ListNode sec = pre.next;
        pre.next = null;
        // 翻转链表
        sec = reverseList(sec);
        mergeList(head,sec);
    }
    public ListNode findMid(ListNode head) {
        ListNode slow = head;
        ListNode fast = head;
        while(fast.next!=null&&fast.next.next!=null){
            slow = slow.next;
            fast = fast.next.next;
        }
        return slow;
    }
    public ListNode reverseList(ListNode head) {
        if(head==null||head.next==null) return head;
        ListNode pre = null;
        ListNode curr = head;
        ListNode next = head.next;
        while(curr!=null) {
            curr.next = pre;
            pre = curr;
            curr = next;
            if(next!=null) {
                next = next.next;
            }
        }
        return pre;
    }
    public void mergeList(ListNode l1,ListNode l2) {
        ListNode curr = l2;
        while(l2!=null) {
            l2 = l2.next;
            curr.next = l1.next;
            l1.next = curr;
            l1 = l1.next.next;
            curr = l2;
        }
    }
}

欢迎大佬们关注小弟的博客https://blog.csdn.net/qq_41522089

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/270807.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号