LeetCode中「排序鍊錶」題解

2021-10-10 17:50:43 字數 2487 閱讀 3379

排序鍊錶

給你鍊錶的頭結點 head ,請將其按 公升序 排列並返回 排序後的鍊錶 。

高階:

你可以在 o

(n log n) 時間複雜度和常數級空間複雜度下,對鍊錶進行排序嗎?

示例 1:

輸入:head =[4

,2,1

,3]輸出:[1,

2,3,

4]

示例 2:

輸入:head =[-

1,5,

3,4,

0]輸出:[-1

,0,3

,4,5

]

示例 3:

輸入:head =

輸出:[

]

鍊錶中節點的數目在範圍 [0,

5*104] 內

-105

<= node.val <=

105

方法一:歸併排序(遞迴法)思路:在鍊錶中點將鍊錶斷開,使用快慢指標法,找到中點後,輸入當前鍊錶左端點和中心端點,遞迴執行,當只有乙個節點時,直接返回此節點

合併環節:將兩個排序的鍊錶進行合併,轉化為乙個排序鍊錶

public listnode sortlist

(listnode head)

// 2、找到鍊錶中間節點並斷開鍊錶 & 遞迴下探

listnode midnode =

middlenode

(head)

; listnode righthead = midnode.next;

midnode.next = null;

listnode left =

sortlist

(head)

; listnode right =

sortlist

(righthead)

;// 3、當前層業務操作(合併有序鍊錶)

return

mergetwolists

(left, right);}

// 找到鍊錶中間節點(876. 鍊錶的中間結點)

private listnode middlenode

(listnode head)

listnode slow = head;

listnode fast = head.next.next;

while

(fast != null && fast.next != null)

return slow;

}// 合併兩個有序鍊錶(21. 合併兩個有序鍊錶)

private listnode mergetwolists

(listnode l1, listnode l2)

else

curr = curr.next;

} curr.next = l1 != null ? l1 : l2;

return sentry.next;

}

複雜度分析:時間複雜度:o(nlogn)

空間複雜度:o(logn)

方法二:歸併排序(從低至頂直接合併)

思路:使用迭代替換遞迴方法

class

solution

res =

newlistnode(0

);res.next = head;

while

(intv < length)

if(i >0)

break

; i = intv;

h2 = h;

while

(i >

0&& h != null)

int c1 = intv, c2 = intv - i;

while

(c1 >

0&& c2 >0)

else

pre = pre.next;

} pre.next = c1 ==

0? h2 : h1;

while

(c1 >

0|| c2 >0)

pre.next = h;

} intv *=2;

}return res.next;

}}

複雜度分析:時間複雜度:o(nlogn)

空間複雜度:o(1)

leetcode 鍊錶排序

對鍊錶排序,用歸併排序。題目要求空間時間複雜度為o nlogn 但是空間複雜度為o 1 1.自己寫的程式,時間複雜度為o nlogn 但是空間複雜度為o n 用快慢指標 分別走2步和1步 找到中間節點。但是最後排序的部分,用複製將排好序的部分貼上會原來鍊錶中,這個方法比較笨,而且增加空間複雜度,並不...

leetcode 鍊錶 排序

思路 使用歸併排序。拆分 合併均採用遞迴方式。public listnode sortlist listnode head pre.next null return merge sortlist head sortlist slow public listnode merge listnode l1...

leetcode 排序鍊錶

利用歸併排序的思想,不過這裡排序的不是列表,是乙個鍊錶。具體 如下 definition for singly linked list.class listnode object def init self,x self.val x self.next none class solution obj...