题目1519:合并两个排序的链表
来源:互联网 发布:杭州编程培训和盈 编辑:程序博客网 时间:2024/06/05 07:32
//题目1519:合并两个排序的链表#include <stdio.h>typedef struct Node{int data;struct Node *next; }Node,*LinkList;void Add(LinkList &list,int value){Node *node=new Node();node->next=NULL;node->data=value; if(list==NULL) {list=node; } else { LinkList p=list; while((p->next)!=NULL) {p=p->next; } p->next=node; }}void Union(LinkList la,LinkList lb,LinkList &lc){ if(la==NULL) { lc=lb; return ; } if(lb==NULL) { lc=la; return ; } Node *p; if(la->data > lb->data) { lc=p=lb; lb=lb->next; } else//(la->data < lb->data) { lc=p=la; la=la->next; } while(la && lb) { if(la->data <= lb->data){ p->next=la; la=la->next;}else{ p->next=lb; lb=lb->next;} p=p->next; } p->next=(la?la:lb);}void prit(LinkList &list){LinkList p=list;while(p->next!=NULL){ printf("%d ",p->data); p=p->next; } printf("%d\n",p->data);//printf("\n");}int main(){ int n,m,x; while(scanf("%d%d",&n,&m)!=EOF) {if(n==0 && m==0) {printf("NULL\n");continue;} LinkList first=NULL,second=NULL,lc=NULL; while(n--) { scanf("%d",&x); Add(first,x); } // prit(first); while(m--) { scanf("%d",&x); Add(second,x); } // prit(second);Union(first,second,lc);prit(lc); } return 0;}