题目描述
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点 组成的。
示例
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
输入:l1 = [], l2 = []
输出:[]
输入:l1 = [], l2 = [0]
输出:[0]
思路
-
创造一个新链表p。(记得保存头结点,用q表示)
-
while循环遍历l1和l2,谁小将谁存到p链表中,同时一起向后移。循环条件是l1和l2都存在。
-
当退出循环后,判断l1和l2是否有剩余,只可能最多有一个剩余,因为如果两个都有则会继续在循环。
-
若l1有剩余,将p指向l1,表示将l1拼接到p链尾。l2同理。
-
最后输出q。
具体实现
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {
ListNode* p = new ListNode(0);
ListNode* q = p; //q来保存p结点,便于返回结果
while(pHead1!=NULL && pHead2!=NULL){
if(pHead1->val < pHead2->val){
p->next=pHead1;
p=p->next;
pHead1=pHead1->next;
}else{
p->next=pHead2;
p=p->next;
pHead2=pHead2->next;
}
}
if(pHead1){
p->next=pHead1;
}
if(pHead2){
p->next=pHead2;
}
return q->next;
}
};
小结
定义一个新链表来保存最后的结果,并输出这个链表。(该代码是在牛客上编译的)