1. 程式人生 > >合併兩個有序連結串列,合併後依然有序

合併兩個有序連結串列,合併後依然有序

合併兩個有序連結串列,合併後的連結串列即為新連結串列newNode,首先判斷兩個連結串列list1和list2的首個節點大小,讓新連結串列newNode指向較小的節點,假設list1較小,然後讓list1指向下一個節點,再與list2進行比較,將較小的節點與newNode連結,直到有一個連結串列的所有節點都合併,再將剩下沒有比較的部分連結串列連結到新連結串列後面。
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
函式實現:

typedef int DataType;

typedef struct SListNode
{
    struct SListNode* _next;
    DataType _data;
}SListNode;
SListNode* SListMerge(SListNode* list1, SListNode* list2)
{
    assert(list1);
    assert(list2);
    SListNode* cur1 = list1;
    SListNode* cur2 = list2;
    SListNode* newHead = NULL;
    SListNode* cur3 = NULL;
    if (cur1->_data > cur2->_data)
    {
        newHead = cur2;
        cur2 =
cur2->_next; } else { newHead = cur1; cur1 = cur1->_next; } cur3 = newHead; while (cur1&&cur2) { if (cur1->_data < cur2->_data) { cur3->_next = cur1; cur1 = cur1->_next; cur3 =
cur3->_next; } else { cur3->_next = cur2; cur2 = cur2->_next; cur3 = cur3->_next; } } if (cur1 != NULL) { cur3->_next = cur1; } else { cur3->_next = cur2; } return newHead; }