七、兩個有序連結串列合併(遞迴方式)
阿新 • • 發佈:2018-12-15
/** * 合併兩個有序連結串列,合併後依舊有序,當連結串列1是空連結串列時,合併結果就是連結串列2,但連結串列2是空連結串列時, * 合併結果是連結串列1;如果兩都是空連結串列,合併結果就是空連結串列; * 比較兩個連結串列的頭結點,小的作為合併後的頭結點,在剩餘節點中,再次比較兩個連結串列的頭結點(採用遞迴)。 */ struct list_head *merge_two_list(struct list_head *list_one, struct list_head *list_two) { struct list_head *new_head = NULL; /*連結串列1為空*/ if (!list_one) return list_two; /*連結串列2為空*/ if (!list_two) return list_one; /*連結串列1頭結點的值 小於 連結串列2頭結點的值*/ if (list_one->data < list_two->data) { new_head = list_one; /*連結串列1頭結點作為新連結串列的頭結點*/ new_head->next = merge_two_list(list_one->next, list_two); } else { /*連結串列2頭結點的值 小於 連結串列1頭結點的值*/ new_head = list_two; new_head->next = merge_two_list(list_one, list_two->next); } return new_head; /*返回新連結串列的頭結點*/ }