链表问题(二)——有序链表合并

来源:互联网 发布:仿京东商城源码 php 编辑:程序博客网 时间:2024/06/03 18:48

已知两个链表head1和head2个字有序,请把他们合并成一个链表依然有序(包含所有结点,即便大小相同)

struct Node {     int data;     Node *next; };//方法一:递归实现Node *Merge(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 = Merge(head1->next, head2);    }    else    {        head = head2;        head->next = Merge(head1,head2->next);    }    return head;}//方法二:循环实现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;        p1=head1;        p2 = head2->next;    }    Node *pcurr=head;    while(p1 != NULL && p2 != NULL)    {        if(p1->data < p2->data)        {            pcurr->next = p1;            pcurr = p1;            p1 = p1->next;        }        else        {            pcurr->next = p2;            pcurr = p2;            p2 = p2->next;        }    }    while(p1 != NULL)    {        pcurr->next = p1;        pcurr = p1;        p1 = p1->next;    }    while(p2 != NULL)    {        pcurr->next = p2;        pcurr = p2;        p2 = p2->next;    }    return head;}
0 0