题意理解
合并两个有序单链表,新链表也是有序。
问题分析
三个循环,第一个循环如果两个链表都不空,比较当前链表值的大小,如果第一个链表值小,当前第一个链表值装入新链表,后移指针;如果第二个链表值小,当前第二个链表值装入新链表,后移指针;
第二个循环如果第一个链表不空,将后续链表接入新链表
第三个循环如果第二个链表不空,将后续链表接入新链表
技巧点:这里没有头结点,在接入新链表时有点麻烦,这里设置一个dummy node来解决。
其他
参考数据结构书上的代码,P26.
链接
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if (!l1 && !l2) //如果两个链表为空
return NULL; //返回空
ListNode* l3 = new ListNode(0); //初始化新链表指针
ListNode* head = l3; //生成dummy结点
while(l1 && l2) //如果两个链表都不空
{
if (l1 -> val < l2 -> val) //判断当前值大小
{
l3 -> next = l1; //接入第一个链表结点
l1 = l1 -> next;
}
else
{
l3 -> next = l2; //接入第二个链表结点
l2 = l2 -> next;
}
l3 = l3 -> next; //后移新链表结点
}
if(l1) //链表1不空
{
l3 -> next = l1; //接入链表1
}
if(l2) //链表2不空
{
l3 -> next = l2; //接入链表2
}
return head->next; //返回时,丢弃dummy结点
}