首页 > Java > java教程 > 重新订购列表:LC培养基,GFG硬

重新订购列表:LC培养基,GFG硬

Patricia Arquette
发布: 2025-01-28 00:05:09
原创
368 人浏览过

Reorder List: LC  medium, GFG hard

题目链接: 力扣、GeeksforGeeks

解题思路

我们需要使用两个指针,分别指向链表的头部和尾部。

方法

步骤 1: 使用快慢指针法找到链表的中点。

步骤 2: 将链表分成两部分:前半部分 firstHalf 和后半部分 secondHalf

步骤 3: 使用 reverse() 函数反转链表的后半部分。

步骤 4: 最后一步,将反转后的后半部分和前半部分合并,得到最终结果。

复杂度

  • 时间复杂度:O(N)
  • 空间复杂度:O(1)

代码

<code class="language-java">/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverse(ListNode head){
        ListNode prev = null;
        ListNode curr = head;
        ListNode next = head.next;
        while(next!=null){
            curr.next = prev;
            prev = curr;
            curr = next;
            next = next.next;
        }
        curr.next = prev;
        return curr;
    }
    public void reorderList(ListNode head) {
        if(head == null || head.next == null ) return;
        // 使用快慢指针法找到链表的中点
        ListNode slow = head;
        ListNode fast = head.next;
        while(fast!=null && fast.next!=null){
            slow = slow.next; // 移动一次
            fast = fast.next.next; // 移动两次
        }
        // 将链表分成两部分
        ListNode secondHalf = slow.next;
        // 将前半部分的尾节点设置为 null,断开连接
        slow.next = null;
        // 反转后半部分
        secondHalf = reverse(secondHalf);
        ListNode firstHalf  = head;
        ListNode temp = secondHalf;
        // 合并两个链表
        while(secondHalf!=null){
            temp = temp.next;
            secondHalf.next = firstHalf.next;
            firstHalf.next  = secondHalf;
            firstHalf = secondHalf.next;
            secondHalf = temp;
        }
        return;
    }
}</code>
登录后复制

更多解法请访问: GitHub

力扣个人主页: 力扣: devn007

GeeksforGeeks 个人主页: GFG: devnirwal16

以上是重新订购列表:LC培养基,GFG硬的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板