/* 連結串列節點 */
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 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) {
/* 只剩連結串列 b 的節點 */
while(pb != NULL) {
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 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;
}
有問題請指教 :)