/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
if(list1==NULL)
return list2;//2个都为空也是这步
if(list2==NULL)
return list1;
ListNode head;//新链表的头结点
ListNode *p1,*p2;//第一个链表中的地址
ListNode *q1,*q2;//第二个链表中的地址
ListNode *tail = &head;//新链表的尾指针,刚开始在头结点处
//2个链表都数据,需要合并
for(p1=list1,q1=list2;p1!=NULL&&q1!=NULL;)
{
p2=p1->next;
q2=q1->next;
//谁val小谁下来新表,尾插
if(p1->val <= q1->val)
{
//尾插
tail->next=p1;//后
tail=p1;//前
tail->next=NULL;
p1=p2;//p往后走,相当于for中的第3个
}
else//p1->val > q1->val
{
tail->next=q1;//后
tail=q1;//前
tail->next=NULL;
q1=q2;//q往后走,相当于for中的第3个
}
}
//一个链表已经完成,另一个还有数据
if(p1!= NULL)//p2空了
{
tail->next=p1;
}
else
{
tail->next=q1;
}
return head.next;
}
};
力扣第21题-合并2个有序链表
最新推荐文章于 2024-07-24 11:56:55 发布