合并两个有序链表,合并后的链表即为新链表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;
}