目录
1.原题链接:
2.双指针(带哨兵位):
我们可以创建一个虚拟头结点,每次取两个链表中较小的结点接在虚拟结点后面,直到将其中一个链表遍历完后,将另一个链表剩下的结点接在最终要返回的链表后面(一个链表遍历完后,另一个链表可能没有遍历完,且未被遍历的结点的值一定是较大的),这样就可以解决这个问题。
基本步骤:
退出循环:
将未遍历的结点接在结果链表后面:
代码实现:
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{
typedef struct ListNode ListNode;
ListNode* newHead=(ListNode*)malloc(sizeof(ListNode));
ListNode*pre=newHead;
ListNode* L1=list1;
ListNode* L2=list2;
while(L1!=NULL&&L2!=NULL)
{
pre->next=L1->val<L2->val?L1:L2;//选择值较小的结点连接
if(L1->val<L2->val)
{
pre=L1;
L1=L1->next;
}
else
{
pre=L2;
L2=L2->next;
}
}
//将未遍历的结点接在结果链表后
if(L1!=NULL)
pre->next=L1;
else
pre->next=L2;
return newHead->next;
}
3.提交结果:
4.读书分享:
《道德经·第四十二章》:
故物或损之而益,或益之而损失。
解释:所以一切事物,减损它有时反而得到增加,增加它有时反而受到减损。
人之所教,我亦教之。
解释:别人教导我的,我也用它教导人。