leetcode:合并两个有序链表

题目描述

题目链接:21. 合并两个有序链表 - 力扣(LeetCode)

leetcode:合并两个有序链表_第1张图片

leetcode:合并两个有序链表_第2张图片

leetcode:合并两个有序链表_第3张图片

题目分析

leetcode:合并两个有序链表_第4张图片

这个算法思路很简单:就是直接找小尾插

定义一个tail和head,对比两个链表结点的val,小的尾插到tail->next,如果一个链表先走完,就把另外一个链表尾插到tail->next,最后返回head就行

具体的流程就是:

leetcode:合并两个有序链表_第5张图片

有一个特殊情况就是:如果list1和list2有一个为空的话,那就直接返回另外一个链表

代码示例

有了思路,我们就可以写代码了:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {
    if(list1==NULL)
    return list2;
    if(list2==NULL)
    return list1;
    struct ListNode*tail=NULL,*head=NULL;
    while(list1&&list2)
    {
        if(list1->valval)
        {
            if(tail==NULL)
                head=tail=list1;
            else
            {
                tail->next=list1;
                tail=tail->next;
            }
            list1=list1->next;
        }
         else
        {
            if(tail==NULL)
                head=tail=list2;
            else
            {
                tail->next=list2;
                tail=tail->next;
            }
            list2=list2->next;
        }
    }
    if(list1)
    tail->next=list1;
    if(list2)
    tail->next=list2;
    return head;
}

这个题就解决了:

leetcode:合并两个有序链表_第6张图片

你可能感兴趣的:(#,刷题,leetcode,链表,算法)