/* 連結串列節點 */typedef struct Node { int data; struct Node *next;} Node;/* 合併兩個升序連結串列為降序連結串列 */Node *merge_lists(Node *a, Node *b){ Node *pa = a->next, *pb = b->next, *t; /* 新連結串列的頭結點使用 a 的頭結點 */ a->next = NULL; free(b); // b 的頭結點是不需要的,可以釋放掉 while(pa != NULL && pb != NULL) { if(pa->data < pb->data) { // 將 pa 插入新連結串列頭部 t = pa->next; pa->next = a->next; a->next = pa; pa = t; } else { // 將 pb 插入新連結串列頭部 t = pb->next; pb->next = a->next; a->next = pb; pb = t; } } /* 注:以下兩個迴圈只會執行其中一個 */ /* 只剩連結串列 a 的節點 */ while(pa != NULL) { t = pa->next; pa->next = a->next; a->next = pa; pa = t; } /* 只剩連結串列 b 的節點 */ while(pb != NULL) { t = pb->next; pb->next = a->next; a->next = pb; pb = t; } return a;}
/* 連結串列節點 */typedef struct Node { int data; struct Node *next;} Node;/* 合併兩個升序連結串列為降序連結串列 */Node *merge_lists(Node *a, Node *b){ Node *pa = a->next, *pb = b->next, *t; /* 新連結串列的頭結點使用 a 的頭結點 */ a->next = NULL; free(b); // b 的頭結點是不需要的,可以釋放掉 while(pa != NULL && pb != NULL) { if(pa->data < pb->data) { // 將 pa 插入新連結串列頭部 t = pa->next; pa->next = a->next; a->next = pa; pa = t; } else { // 將 pb 插入新連結串列頭部 t = pb->next; pb->next = a->next; a->next = pb; pb = t; } } /* 注:以下兩個迴圈只會執行其中一個 */ /* 只剩連結串列 a 的節點 */ while(pa != NULL) { t = pa->next; pa->next = a->next; a->next = pa; pa = t; } /* 只剩連結串列 b 的節點 */ while(pb != NULL) { t = pb->next; pb->next = a->next; a->next = pb; pb = t; } return a;}
有問題請指教 :)