之前王道上有一个题目是按照逆序合并两个单链表,只需要在下面这个题目的基础上改成头插即可
https://blog.csdn.net/qq_39328436/article/details/107473409
【方法一:前后指针+头结点+尾插】
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if(l1==nullptr) return l2;
if(l2==nullptr) return l1;
ListNode *L=new ListNode();
L->next=nullptr;//创建一个头结点
ListNode *tail=L;
ListNode *p=l1,*q=l2,*p_n=p->next,*q_n=q->next;
while(p!=nullptr&&q!=nullptr)
{
if(p->val<=q->val){
tail->next=p;
p_n=p->next;
p->next=nullptr;
tail=tail->next;
p=p_n;
}else{
tail->next=q;
q_n=q->next;
q->next=nullptr;
tail=tail->next;
q=q_n;
}
}
if(p!=nullptr)tail->next=p;//谁剩下了就谁直接放在队尾
if(q!=nullptr)tail->next=q;
return L->next;
}