合并两个有序链表OJ

合并两个有序链表OJ

合并两个有序链表OJ_第1张图片

文章目录

  • 合并两个有序链表OJ
    • 一、题目及要求
    • 二、思路分析
    • 三、代码实现

一、题目及要求

合并两个有序链表OJ_第2张图片
合并两个有序链表OJ_第3张图片
合并两个有序链表OJ_第4张图片

二、思路分析

合并两个有序链表OJ_第5张图片
其次,题目里说了新链表是通过拼接原来的结点形成的,所以说我们不需要开辟新的空间。

三、代码实现

if (list1 == NULL)
{
    return list2;
}

if (list2 == NULL)
{
    return list1;
}

struct ListNode* newlist = NULL;
struct ListNode* newhead = newlist;//需要返回头,所以说必须创建一个临时的存储
while (list1 && list2)
{
    if (list1->val < list2->val)
    {
        if (newlist == NULL)
        {
            newhead = newlist = list1;
        }
        else
        {
            newlist->next = list1;
            newlist = newlist->next;
        }
        list1 = list1->next;
    }
    else
    {
        if (newlist == NULL)
        {
            newhead = newlist = list2;
        }
        else
        {
            newlist->next = list2;
            newlist = newlist->next;
        }
        list2 = list2->next;
    }
}

if (list1)
{
    newlist->next = list1;
}

if (list2)
{
    newlist->next = list2;//直接接上就行了
}

return newhead;

你可能感兴趣的:(链表,数据结构,c语言,开发语言,算法)