合併兩個有序連結串列,合併後依然有序
阿新 • • 發佈:2018-12-29
合併兩個有序連結串列,合併後的連結串列即為新連結串列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;
}