LeetCode之鍊錶排序 歸併排序

2021-10-09 06:13:34 字數 1702 閱讀 6132

劍指 offer 25. 合併兩個排序的鍊錶

輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的節點仍然是遞增排序的。

輸入:1->2->4, 1->3->4

輸出:1->1->2->3->4->4

常規做法是逐個比較即可,引入頭結點

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

else

ret=ret-

>next;}if

(l1) ret-

>next=l1;

else ret-

>next=l2;

return dummy-

>next;}}

;

在這裡可以對常規做法用遞迴形式來寫,兩者時間複雜度和空間複雜的很接近。

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

else}}

;

148. 排序鍊錶

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

示例1:

輸入: 4->2->1->3

輸出: 1->2->3->4

示例2:

輸入: -1->5->3->4->0

輸出: -1->0->3->4->5

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

pre-

>next=

nullptr

;//分治思想

return

addtwo

(sortlist

(head)

,sortlist

(low));

}//如何合併兩段?

listnode*

addtwo

(listnode* l1,listnode* l2)

else}}

;

147. 對鍊錶進行插入排序

還是上題,在這裡我們不使用歸併排序了,改用插入排序。

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

low-

>next=fast-

>next;

fast-

>next=temp-

>next;

temp-

>next=fast;

fast=low-

>next;

}else

}return dummy-

>next;}}

;

鍊錶排序 歸併

遞迴方法的歸併排序三部曲 1,快慢指標找中點 2,遞迴呼叫mergesort,3,合併兩個鍊錶。class solution listnode mergesort listnode node breakn next nullptr listnode l1 mergesort node listnod...

leetcode之重排序鍊錶

definition for singly linked list.struct listnode 一 要找到鍊錶的中間節點,然後把鍊錶分為兩個,最關鍵的是不要忘記找到中間節點後,把鍊錶分為兩部分 middle next nulllptr 二 如何反轉鍊錶 三 如何合併鍊錶 class soluti...

鍊錶排序 歸併排序

要求在空間複雜度為o 1 的情況下對鍊錶進行排序,在不考慮時間複雜度的情況下可以考慮氣泡排序,只對鍊錶中的值進行操作,這樣時間複雜度為o n 2 用歸併排序,時間複雜度為o nlogn 以下為歸併排序 實現 public listnode sortlist listnode head private...