回覆列表
  • 1 # 藍風24

    /* 連結串列節點 */

    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;

    }

    有問題請指教 :)

  • 中秋節和大豐收的關聯?
  • 求關於五月二十號的搞笑空間說說?