contributed by < Thegoatistasty
>
注意書寫規範:中英文間用一個半形空白字元區隔。
謝謝老師,有進行修改了
這邊曾經遇到的問題是沒有預留 '/0'
位置給 value,導致出現
目前還沒找到是哪裡產生這樣的訊息,不過解決方法就是在 malloc 時多加一個 byte 的空間
遇到的問題類似,以q_remove_head為例
查詢教育部辭典「蠻」,改進你的漢語書寫。
收到!
原本這麼寫,但會跑出
ERROR: Failed to store removed value
後來發現sp已經malloc過了(q_test.c裡do_remove的remove),再malloc一次會在測試時找不到原本的位置,所以將malloc刪掉就好了
利用老師上課提到的『指標一快一慢』的方法(Hare & Tortoise Algorithm)
參考 npes87184's blog的作法,再以自己的方法實作
為了實作 merge sort,我加入了兩個函式:
struct list_head *merge_two_lists
: 用來合併二個鏈結串列struct list_head *merge_sort
: merge sort 的遞迴式merge_two_lists 原本是這麼做的
但當我 make test 時會顯示
FATAL ERROR: Calls to malloc disallowed
發現它不讓我使用 malloc,思來想去找不到好方法,於是尋找是否有人用類似的方法。結果找到 @seasonwang 和我參考的是同一個部落格,而且是用 indirect pointer 的方式,於是我將他的基礎上改進程式碼(減少一個 indirect pointer ),並改為
請查詢英文字典,理解 "optimize" 和 "improve" 的差異。
注意 資訊科技詞彙翻譯
然後是遞迴的 merge sort
再來是作業的 q_sort,當時忘記重新連結頭跟尾,debug 了很久
我第一眼看到這個函式時,蠻疑惑為什麼會需要 merge多個 list,因為之前操作都是只有一個 list 的情形。於是閱讀了 qtest.c
的 do_merge
和 do_new
才發現一直以來操作的其實是 current->q
。
而在 do_merge
呼叫 q_merge
時會傳入 &chain.head
,並接收 merge 完後 list 的長度。所以要存取所有的 list 的話,需要用到 queue_context_t
這個 struct。
2487. Remove Nodes From Linked List
改以 Graphviz 製圖
最直觀的解法應該是從頭開始逐一節點檢查,但是這樣時間複雜度會是 。我觀察之後發現可以由最後一個 node 往前 traverse,遇到 value 比較小的直接 delete 掉,如此時間複雜度就變為
二者非常類似,我都是將 traverse 到的點用 list_move
移到head後面,比較不同的是 q_reverseK 需要額外用一個 counter 計數以及 head 的位置要調整而已
目前95/100