请看题目:
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
实例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; }
本篇完。