#include <stdio.h>
#include <stdlib.h>
struct node {
int val;
struct node *next;
};
struct node* createNode(int val) {
struct node
* newNode
= (struct node
*) malloc(sizeof(struct node
)); newNode->val = val;
newNode->next = NULL;
return newNode;
}
void printList(struct node* head) {
while (head != NULL) {
head = head->next;
}
}
struct node* merge(struct node* list1, struct node* list2) {
struct node
* ans
= (struct node
*) malloc(sizeof(struct node
)); struct node* head = ans;
while (list1 != NULL && list2 != NULL) {
if (list1->val < list2->val) {
ans->next = list1;
list1 = list1->next;
ans = ans->next;
}
else if (list1->val == list2->val) {
ans->next = list1;
ans = ans->next;
list1 = list1->next;
list2 = list2->next;
}
else {
ans->next = list2;
list2 = list2->next;
ans = ans->next;
}
}
for (; list1; list1 = list1->next) {
ans->next = list1;
ans = ans->next;
}
for (; list2; list2 = list2->next) {
ans->next = list2;
ans = ans->next;
}
struct node* temp = head->next; // 跳過 dummy 頭節點
free(head
); // 釋放 dummy node 記憶體 return temp;
}
int main() {
// 建立 list1: 1 -> 3 -> 5
struct node* list1 = createNode(1);
list1->next = createNode(3);
list1->next->next = createNode(5);
// 建立 list2: 2 -> 4 -> 6 -> 8
struct node* list2 = createNode(2);
list2->next = createNode(4);
list2->next->next = createNode(6);
list2->next->next->next = createNode(8);
list2->next->next->next -> next = createNode(18);
printList(list1);
printList(list2);
// 合併 list1 和 list2
struct node* merged = merge(list1, list2);
printList(merged);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnN0cnVjdCBub2RlIHsKICAgIGludCB2YWw7CiAgICBzdHJ1Y3Qgbm9kZSAqbmV4dDsKfTsKCnN0cnVjdCBub2RlKiBjcmVhdGVOb2RlKGludCB2YWwpIHsKICAgIHN0cnVjdCBub2RlKiBuZXdOb2RlID0gKHN0cnVjdCBub2RlKikgbWFsbG9jKHNpemVvZihzdHJ1Y3Qgbm9kZSkpOwogICAgbmV3Tm9kZS0+dmFsID0gdmFsOwogICAgbmV3Tm9kZS0+bmV4dCA9IE5VTEw7CiAgICByZXR1cm4gbmV3Tm9kZTsKfQoKdm9pZCBwcmludExpc3Qoc3RydWN0IG5vZGUqIGhlYWQpIHsKICAgIHdoaWxlIChoZWFkICE9IE5VTEwpIHsKICAgICAgICBwcmludGYoIiVkICIsIGhlYWQtPnZhbCk7CiAgICAgICAgaGVhZCA9IGhlYWQtPm5leHQ7CiAgICB9CiAgICBwcmludGYoIlxuIik7Cn0KCnN0cnVjdCBub2RlKiBtZXJnZShzdHJ1Y3Qgbm9kZSogbGlzdDEsIHN0cnVjdCBub2RlKiBsaXN0MikgewogICAgc3RydWN0IG5vZGUqIGFucyA9IChzdHJ1Y3Qgbm9kZSopIG1hbGxvYyhzaXplb2Yoc3RydWN0IG5vZGUpKTsKICAgIHN0cnVjdCBub2RlKiBoZWFkID0gYW5zOwoKICAgIHdoaWxlIChsaXN0MSAhPSBOVUxMICYmIGxpc3QyICE9IE5VTEwpIHsKICAgICAgICBpZiAobGlzdDEtPnZhbCA8IGxpc3QyLT52YWwpIHsKICAgICAgICAgICAgYW5zLT5uZXh0ID0gbGlzdDE7CiAgICAgICAgICAgIGxpc3QxID0gbGlzdDEtPm5leHQ7CiAgICAgICAgICAgIGFucyA9IGFucy0+bmV4dDsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAobGlzdDEtPnZhbCA9PSBsaXN0Mi0+dmFsKSB7CiAgICAgICAgICAgIGFucy0+bmV4dCA9IGxpc3QxOwogICAgICAgICAgICBhbnMgPSBhbnMtPm5leHQ7CiAgICAgICAgICAgIGxpc3QxID0gbGlzdDEtPm5leHQ7CiAgICAgICAgICAgIGxpc3QyID0gbGlzdDItPm5leHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBhbnMtPm5leHQgPSBsaXN0MjsKICAgICAgICAgICAgbGlzdDIgPSBsaXN0Mi0+bmV4dDsKICAgICAgICAgICAgYW5zID0gYW5zLT5uZXh0OwogICAgICAgIH0KICAgIH0KCiAgICBmb3IgKDsgbGlzdDE7IGxpc3QxID0gbGlzdDEtPm5leHQpIHsKICAgICAgICBhbnMtPm5leHQgPSBsaXN0MTsKICAgICAgICBhbnMgPSBhbnMtPm5leHQ7CiAgICB9CgogICAgZm9yICg7IGxpc3QyOyBsaXN0MiA9IGxpc3QyLT5uZXh0KSB7CiAgICAgICAgYW5zLT5uZXh0ID0gbGlzdDI7CiAgICAgICAgYW5zID0gYW5zLT5uZXh0OwogICAgfQoKICAgIHN0cnVjdCBub2RlKiB0ZW1wID0gaGVhZC0+bmV4dDsgLy8g6Lez6YGOIGR1bW15IOmgreevgOm7ngogICAgZnJlZShoZWFkKTsgLy8g6YeL5pS+IGR1bW15IG5vZGUg6KiY5oa26auUCiAgICByZXR1cm4gdGVtcDsKfQoKaW50IG1haW4oKSB7CiAgICAvLyDlu7rnq4sgbGlzdDE6IDEgLT4gMyAtPiA1CiAgICBzdHJ1Y3Qgbm9kZSogbGlzdDEgPSBjcmVhdGVOb2RlKDEpOwogICAgbGlzdDEtPm5leHQgPSBjcmVhdGVOb2RlKDMpOwogICAgbGlzdDEtPm5leHQtPm5leHQgPSBjcmVhdGVOb2RlKDUpOwoKICAgIC8vIOW7uueriyBsaXN0MjogMiAtPiA0IC0+IDYgLT4gOAogICAgc3RydWN0IG5vZGUqIGxpc3QyID0gY3JlYXRlTm9kZSgyKTsKICAgIGxpc3QyLT5uZXh0ID0gY3JlYXRlTm9kZSg0KTsKICAgIAogICAgbGlzdDItPm5leHQtPm5leHQgPSBjcmVhdGVOb2RlKDYpOwogICAgbGlzdDItPm5leHQtPm5leHQtPm5leHQgPSBjcmVhdGVOb2RlKDgpOwogICAgbGlzdDItPm5leHQtPm5leHQtPm5leHQgLT4gbmV4dCA9IGNyZWF0ZU5vZGUoMTgpOwoKICAgIHByaW50ZigibGlzdDE6ICIpOwogICAgcHJpbnRMaXN0KGxpc3QxKTsKCiAgICBwcmludGYoImxpc3QyOiAiKTsKICAgIHByaW50TGlzdChsaXN0Mik7CgogICAgLy8g5ZCI5L21IGxpc3QxIOWSjCBsaXN0MgogICAgc3RydWN0IG5vZGUqIG1lcmdlZCA9IG1lcmdlKGxpc3QxLCBsaXN0Mik7CgogICAgcHJpbnRmKCJtZXJnZWQgbGlzdDogIik7CiAgICBwcmludExpc3QobWVyZ2VkKTsKCiAgICByZXR1cm4gMDsKfQ==