1. 程式人生 > >將兩個各自有序的連結串列,合成一個有序的連結串列

將兩個各自有序的連結串列,合成一個有序的連結串列

方法一:

Node *Merge(Node *head1, Node *head2)
{
    if(head1 == NULL)
    {
        return head2;
    }
    if(head2 == NULL)
    {
        return head1;
    }
    Node *head = NULL;
    Node *p1 = NULL;
    Node *p2 = NULL;

    if((head1->data) < (head2->data))
    {
        head = head1;
        p1 = head1->next;
        p2 = head2;
    }
    else
    {
        head = head2;
        p2 = head2->next;
        p1 = head1;
    }

    Node *pcurrent = head;
    while((p1 != NULL) && (p2 != NULL))
    {
        if(p1->data <= p2->data)
        {
            pcurrent->next = p1;
            pcurrent = p1;
            p1 = p1->next;
        }
        else
        {
            pcurrent->next = p2;
            pcurrent = p2;
            p2 = p2->next;
        }
    }
    if(p1 != NULL)
    {
        pcurrent->next = p1;
    }
    if(p2 != NULL)
    {
        pcurrent->next = p2;
    }

    return head;
}

方法二:利用遞迴的方法

Node *MergeRecursive(Node *head1, Node *head2)
{
    if(head1 == NULL)
    {
        return head2; 
    }
    if(head2 == NULL)
    {
        return head1;
    }
    Node *head = NULL;

    if(head1->data < head2->data)
    {
        head = head1;
        head->next = MergeRecsive(head1->next, head2);
    }
    else
    {
        head = head2;
        head->next = MergeRecsive(head1, head2->next);
    }

    return head;
}