请看题目:
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
实例1:
输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]
实例2:
输入:l1 = [], l2 = [] 输出:[]
实例3:
输入:l1 = [], l2 = [0] 输出:[0]
解题:
思路:
由于所给的两个链表都是升序的,所以从头开始比较两个链表的值,小者作首位,为了方便找前一个值,可以创建一个哑结点,表示前一个结点,动图如下:
代码实现:
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){
// 创建哑结点
struct ListNode {
int val = -1;
struct ListNode *next;
}dummy;
// 表示前一个结点
struct ListNode* prev = &dummy;
// 二者均非空,则进行比较
while(list1 && list2)
{
if(list1->val < list2->val)
{
prev->next = list1;
list1 = list1->next;
}
else
{
prev->next = list2;
list2 = list2->next;
}
prev = prev->next;
}
prev->next = list1 == NULL?list2:list1;
return dummy->next;
}
本篇完。