LeetCode21:合并两个有序链表(C语言)

21. 合并两个有序链表

将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

/**
 * Author : FlynnLi
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
    if (!l1)
        return l2;
    if (!l2)
        return l1;
    struct ListNode *head = (struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode *p = head;
    while (l1 && l2)
    {
        if (l1->val < l2->val)
        {
            p->next = l1;
            l1 = l1->next;
        }
        else
        {
            p->next = l2;
            l2 = l2->next;
        }
        p = p->next;
    }
    if (l1)
        p->next = l1;
    else if (l2)
        p->next = l2;
    return head->next;
}

代码思路:定义一个表头结点和指向该表头结点的指针,对比两个链表,将小的或等于的数的结点置为p->next,然后将对比后链表l1或l2的下一个结点置为要对比的当前结点,继续循环比较,最后将多余结点串到表尾。

你可能感兴趣的:(C语言,LeetCode,数据结构,单链表,算法)