//合并两个单链表,合并后依然有序(升序)
ListNode * MergeOrderList(ListNode *list1, ListNode *list2)
{
//List1是链表一的第一个节点
ListNode *cur1 = list1;
ListNode *cur2 = list2;
ListNode *result = NULL;
ListNode *tail = NULL;
ListNode *next;
while(cur1 != NULL && cur2 != NULL){
//取短的链表
if(cur1->data <= cur->data){
//取链表一的节点
if(result != NULL){
//结果链表不为空,直接在最后一个节点上做插入
//保存链表一的下一个节点,以便于下一次循环的继续
next = cur1->next;
//插入过程
tail->next = cur1;
cur1->next = NULL;
//保存新的最后一个节点
tail = cur1;
cur1 = next;
}
else{
//保存下一个节点,让循环继续
next = cur1->next;
result = cur1;
cur1->next = NULL;
//保存新的最后一个节点
tail = cur1;
cur1 = next;
}
}
else{
//取链表二的节点
{
if(result != NULL){
//结果链表不为空,直接在最后一个节点上做插入
//保存链表二的下一个节点,以便于下一次循环的继续
next = cur2->next;
//插入过程
tail->next = cur2;
cur2->next = NULL;
//保存新的最后一个节点
tail = cur2;
cur2 = next;
}
else{
//保存下一个节点,让循环继续
next = cur2->next;
result = cur2;
cur1->next = NULL;
//保存新的最后一个节点
tail = cur2;
cur2 = next;
}
}
}
//其中的一个链表为空
if(cur1 == NULL){
tail->next = cur2;
}
if(cur2 == NULL){
tail->next = cur1;
}
return result;
}
合并两个有序链表,合并后依然有序
最新推荐文章于 2025-05-25 20:59:46 发布