//算法思想:
//指针P指向list1,指针Q指向list2,指针r指向合并后的链表
//比较PQ所指结点的值,谁小就把谁加入到新的链表中
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {
struct ListNode *p = list1;
struct ListNode *q = list2;
struct ListNode *r = NULL;
//有空链的情况
if(p == NULL)
{
return q;
}
else if(q == NULL)
{
return p;
}
//首结点单独处理
if(p->val < q->val)
{
r = p;
p = p->next;
r -> next = NULL;
}
else
{
r = q;
q = q -> next;
r -> next = NULL;
}
struct ListNode *ret = r;//r会移动,ret返回时使用
while ((p!=NULL)&&(q!=NULL))
{
if(p->val < q->val)
{
//将节点摘下
struct ListNode *s = p;
p = p->next;
s->next = NULL;
//插入
r->next = s;
r = r->next;
}
else
{
//将节点摘下
struct ListNode *s = q;
q = q->next;
s->next = NULL;
//插入
r->next = s;
r = r->next;
}
}
//如果其中一个链表遍历完,就将剩下的链表插入到r的后边
if(p == NULL)
{
r->next = q;
}
else
{
r->next = p;
}
return ret;
}
Leetcode-Easy-合并两个有序链表(C)
于 2023-11-29 14:46:41 首次发布