Sort List 체인 테이블 정렬 @LeetCode
공간은 O(logn)입니다. 스택 공간을 사용했습니다.
package Level4;
import Utility.ListNode;
/**
* Sort List
*
* Sort a linked list in O(n log n) time using constant space complexity.
*
*/
public class S144 {
public static void main(String[] args) {
int[] list = {1,4,2,3};
ListNode head = ListNode.create(list);
ListNode h = sortList(head);
h.print();
}
public static ListNode sortList(ListNode head) {
if(head==null || head.next==null){ //
return head;
}
ListNode fast = head;
ListNode slow = head;
ListNode preSlow = head;
//
while(fast!=null && fast.next!=null){
fast = fast.next.next;
preSlow = slow;
slow = slow.next;
}
// System.out.println(preSlow.val);
// ,
preSlow.next = null;
ListNode first = sortList(head); //
ListNode second = sortList(slow); //
ListNode dummy = new ListNode(-1);
ListNode dummyCur = dummy;
while(first!=null && second!=null){ //
if(first.val<second.val){
dummyCur.next = first;
first = first.next;
}else if(second.val<=first.val){
dummyCur.next = second;
second = second.next;
}
dummyCur = dummyCur.next;
}
while(first != null){
dummyCur.next = first;
first = first.next;
dummyCur = dummyCur.next;
}
while(second != null){
dummyCur.next = second;
second = second.next;
dummyCur = dummyCur.next;
}
return dummy.next;
}
}
Merge Sort:
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public static ListNode sortList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode slow = head, fast = head, preSlow = head;
while (fast != null && fast.next != null) {
preSlow = slow;
slow = slow.next;
fast = fast.next.next;
}
preSlow.next = null;
ListNode h1 = sortList(head);
ListNode h2 = sortList(slow);
return mergeList(h1, h2);
}
public static ListNode mergeList(ListNode h1, ListNode h2) {
ListNode dummyHead = new ListNode(0);
ListNode dummy = dummyHead;
while (h1 != null && h2 != null) {
if (h1.val <= h2.val) {
dummy.next = h1;
h1 = h1.next;
} else {
dummy.next = h2;
h2 = h2.next;
}
dummy = dummy.next;
}
while (h1 != null) {
dummy.next = h1;
h1 = h1.next;
dummy = dummy.next;
}
while (h2 != null) {
dummy.next = h2;
h2 = h2.next;
dummy = dummy.next;
}
return dummyHead.next;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.