剑指offer系列(25)合并两个排序的链表
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
本题考查链表的基本操作,插入操作,归并排序的合并操作。
解题思路:利用归并排序的 merge
方法,进行合并。遍历两个单链表,当链表1 节点 小于 链表2节点值时,将链表1节点加入新链表,否则将链表2节点加入新链表,直至某个链表遍历结束。遍历结束后,当某个链表未遍历完,则直接将其加入新链表后即可。实现如下
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* cur1 = l1;
ListNode* cur2 = l2;
ListNode* resDummyHead = new ListNode(0);
ListNode* cur_res = resDummyHead;
while (cur1 && cur2){
if (cur1->val <= cur2->val){
cur_res->next = cur1;
cur1 = cur1->next;
}
else if (cur2->val < cur1->val){
cur_res->next = cur2;
cur2 = cur2->next;
}
cur_res = cur_res->next;
}
/*
// 可直接将未加入节点链接至新链表
if (cur1) resHead->next = cur1;
if (cur2) resHead->next = cur2;
return res->next;
*/
// 归并排序写法
while(cur1){
cur_res->next = cur1;
cur1 = cur1->next;
cur_res = cur_res->next;
}
while (cur2){
cur_res->next = cur2;
cur2 = cur2->next;
cur_res = cur_res->next;
}
return resDummyHead->next;
}
}
执行结果如下