> Java > java지도 시간 > 재주문 목록: LC 매체, GFG 하드

재주문 목록: LC 매체, GFG 하드

Patricia Arquette
풀어 주다: 2025-01-28 00:05:09
원래의
429명이 탐색했습니다.

Reorder List: LC  medium, GFG hard

질문 링크: Likou, GeeksforGeeks

문제 해결 아이디어

연결된 목록의 머리와 꼬리를 각각 가리키는 두 개의 포인터를 사용해야 합니다.

방법

1단계: 빠른 포인터와 느린 포인터 방법을 사용하여 연결 목록의 중간점을 찾습니다.

2단계: 연결 목록을 전반부 firstHalf와 후반부 secondHalf의 두 부분으로 나눕니다.

3단계: 연결 목록의 후반부를 반전하려면 reverse() 함수를 사용하세요.

4단계: 마지막 단계는 반전된 후반부와 전반부를 병합하여 최종 결과를 얻는 것입니다.

복잡성

  • 시간 복잡도: O(N)
  • 공간 복잡도: O(1)

코드

/**
 * 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;
    }
}
로그인 후 복사

더 많은 솔루션을 보려면 GitHub

를 방문하세요.

르코 개인 홈페이지 : 르코 : devn007

GeeksforGeeks 개인 홈페이지: GFG: devnirwal16

위 내용은 재주문 목록: LC 매체, GFG 하드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿