所属专栏:玩转数据结构题型
博主首页:初阳785
代码托管:chuyang785
感谢大家的支持,您的点赞和关注是对我最大的支持!!!
博主也会更加的努力,创作出更优质的博文!!
关注我,关注我,关注我,重要的事情说三遍!!!!!!!!
1.题目来源
2.题目描述
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
3.解题思路
这里我们的大概思路是创建一个头节点head,然后比较两个链表节点的大小,小的为插到我们的新节点后面,然后依次往后遍历。同时我们创建一个tail节点来代替我们的head头节点遍历后面的链表,这样子的话我们就可以记录我们的头节点,到时候只要返回head就行了。
但是我们得先给我们的头节点附上一个节点,不然我们head和tail在一开始使用->的时候就报错了。
这里就开始比较了,小的就尾插到我们创建的节点后面。
这里当其中一个指向NULL后,我们直接吧另一个的节全部都指向我们创建的节点后面去。
4.代码展示
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2)
{
//判断l1或者l2为NULL的情况
if(l1==NULL)
return l2;
else if(l2==NULL)
return l1;
struct ListNode *head=NULL,*tail=NULL;
//先给我们的头节点赋值一个节点
if(l1->val < l2->val)
{
head=l1;
tail=l1;
l1=l1->next;
}
else
{
head=l2;
tail=l2;
l2=l2->next;
}
//比较,链接链表
while(l1 && l2)
{
if(l1->val < l2->val)
{
tail->next=l1;
tail=l1;
l1=l1->next;
}
else
{
tail->next=l2;
tail=l2;
l2=l2->next;
}
}
//判断谁先遍历完
if(l1 == NULL)
{
tail->next=l2;
}
else
{
tail->next=l1;
}
return head;
}