题目1519:合并两个排序的链表

来源:互联网 发布:数据英文单词 编辑:程序博客网 时间:2024/05/16 18:07
#include <cstdlib>#include <cstdio>using namespace std; struct Node {    int num;    Node * next;     }; Node * Merge(Node * pHead1, Node * pHead2){    if(pHead1 == NULL)        return pHead2;    else if(pHead2 == NULL)        return pHead1;    Node* pMergedHead = NULL;    if(pHead1->num < pHead2->num)    {        pMergedHead = pHead1;        pMergedHead->next = Merge(pHead1->next, pHead2);    }    else    {        pMergedHead = pHead2;        pMergedHead->next = Merge(pHead1, pHead2->next);    }    return pMergedHead;} Node * Merge2(Node * h1,Node * h2){    Node * head=NULL;    Node * tail=tail;    Node * temp=NULL;    h1=h1->next;h2=h2->next;         while(h1&&h2)    {         temp=(Node *)malloc(sizeof(Node ));          if(h1->num > h2->num)         {              temp->num =  h1->num ;              h1=h1->next;                        }            else         {              temp->num =  h2->num ;              h2=h2->next;                 }          temp->next=NULL;         tail->next=temp;         tail=tail->next;            printf("%d ",temp->num);         }    if(h1)    {         tail->next=h1;          }    if(h2)    {         tail->next=h2;          }    return head->next;}//*/int main(){    int n,m,t;    Node * head1=NULL; Node * head2=NULL;    Node * tail1=head1;Node * tail2=head2;    while(~scanf("%d %d",&n,&m) )    {         if(n==0&&m==0) printf("NULL\n");         else{         Node * temp1=(Node *)malloc(sizeof(Node ));         temp1->next=NULL;         head1=temp1;         tail1=head1;                   Node * temp2=(Node *)malloc(sizeof(Node ));         temp2->next=NULL;         head2=temp2;         tail2=head2;          while(n--)         {               scanf("%d",&t);               temp1=(Node *)malloc(sizeof(Node ));               temp1->next=NULL;                 temp1->num=t;               tail1->next=temp1;               tail1=tail1->next;                }                        while(m--)         {               scanf("%d",&t);               temp2=(Node *)malloc(sizeof(Node ));               temp2->next=NULL;                 temp2->num=t;               tail2->next=temp2;               tail2=tail2->next;              }         /*         head1=head1->next;           while(head1) {printf("%d ",head1->num);head1=head1->next;}         printf("\n");         head2=head2->next;           while(head2) {printf("%d ",head2->num);head2=head2->next;}         printf("zhelimeiyouwenti\n\n");         */         Node * result=Merge(head1->next,head2->next);         while(result->next)          {               printf("%d ",result->num);                result=result->next;                      }          if(result)                 printf("%d\n",result->num);         //*/         }    }        return 0;} /**************************************************************    Problem: 1519    User: 萧然677    Language: C++    Result: Accepted    Time:240 ms    Memory:4188 kb****************************************************************/

自己写的函数一运行就崩溃了,还在调试当中。。。。那个Merge函数是参考的,用递归。。。。
0 0