contributed by < uccuser159
>
考慮一個單向 linked list:
在不存在環狀結構的狀況下,以下函式能夠對 linked list 元素從小到大排序:
請補完程式碼。
思考
由上面程式可知,left 與 right 會不斷經過遞迴將 linked list 做切割,為了要比較大小,left = sort(left)
用來抓出第一個元素,將left->next = NULL
。
利用 sort(right)
遞迴到最後的部分,直到 right->next == NULL
,所以 sort(right)
最後指向 3 這個 node,再一路遞迴 start
回去。
利用 *merge
來建立 node 之間的連結
以此範例
if (!merge)
為第一次要做 merge 的元素,所以 LL4 為start=merge=right
right
更新跑下一個 node 來判定與left
之間的大小,LL6 為right=right->next
right==NULL
或是left
與right
都有指向某 node 但left->data
比較小(此處範例為right==NULL
的狀況),則left
指向 merge
,因為不是第一次做 merge 的元素,跑到 else 判斷,所以 LL2 為 merge->next = left
(因為有start=merge
的操作)相反的狀況可以推回 LL1 為 start=merge=left
;LL3 為 left=left->next
;LL5 為merge->next = right
說好的進度呢?