Leetcode 21. Merge Two Sorted Lists

题目

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
分析:
合并两个已排序的链表,由于新链表也需要排序,所以需要依次判断链表中的各个数值大小。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
    struct ListNode * temp,*temp2,* ans;
    temp=NULL;temp2=NULL;ans=NULL;
    while(l1!=NULL&&l2!=NULL)
    {
        temp=(struct ListNode *)malloc(sizeof(struct ListNode));
        if(l1->valval)
        {
            temp->val=l1->val;
            l1=l1->next;
        }
        else
        {
            temp->val=l2->val;
            l2=l2->next;
        }
        temp->next=NULL;
        if(ans==NULL)
        {
            ans=temp;
            temp2=temp;
        }
        else
        {
            temp2->next=temp;
            temp2=temp;
        }
    }
    while(l1!=NULL)
    {
        temp=(struct ListNode *)malloc(sizeof(struct ListNode));
        temp->val=l1->val;
        l1=l1->next;
        temp->next=NULL;
        if(ans==NULL)
        {
            ans=temp;
            temp2=temp;
        }
        else
        {
            temp2->next=temp;
            temp2=temp;
        }
    }
    while(l2!=NULL)
    {
        temp=(struct ListNode *)malloc(sizeof(struct ListNode));
        temp->val=l2->val;
        l2=l2->next;
        temp->next=NULL;
        if(ans==NULL)
        {
            ans=temp;
            temp2=temp;
        }
        else
        {
            temp2->next=temp;
            temp2=temp;
        }
    }
    return ans;
}

先对两个非空链表进行比较,最后不要忘记多余链表的数值。

while(l1!=NULL)
{
   temp2->next=l1;
}

最后的合并这样写会更简单。

你可能感兴趣的:(Leetcode 21. Merge Two Sorted Lists)