劍指 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...