在一个链表上操作
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param l1 ListNode类
* @param l2 ListNode类
* @return ListNode类
*/
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
// write code here
// if(!l1&&!l2)return nullptr;
// if(!l1)return l2;
// if(!l2)return l1;
if(l1==nullptr||l2==nullptr) return l1?l1:l2;//看到别人的更简洁些哈哈
ListNode* q=nullptr;
ListNode* p1=l1;
ListNode* p2=l2;
if(p1->val<=p2->val)//把最小的头结点赋值给q;
{
q=p1;
p1=p1->next;//后移
}
else
{
q=p2;
p2=p2->next;
}
ListNode *qq=q;//记录头结点
while(p2&&p1)
{
if(p1->val<=p2->val)
{
q->next=p1;
q=p1;//更新位置
p1=p1->next;
}
else//大于
{
q->next=p2;
q=p2;
p2=p2->next;
}
}
if(p1)//剩余的直接连接在后面
q->next=p1;
if(p2)
q->next=p2;
return qq;
}
};
京公网安备 11010502036488号