/* gia su da co 2 danh sach l1 va l2 va 2 ds nay da dc sap xep tang dan. toi chi demo phan tron 2 ds tang nay lai thoi. */ #include <stdio.h> #include <conio.h> typedef int ElementType; struct Node { ElementType Element; Node *Next; }; typedef Node *List; typedef Node *List; typedef Node *Position; void makenulllist(List L) { L->Next=NULL; } void insertlastlist(List L,ElementType X) { Node *newnode=new Node; newnode->Element=X; Position P=L; while(P->Next!=NULL) { P=P->Next; } P->Next=newnode; newnode->Next=NULL; } void showlist(List L) { Position P=L->Next; while(P!=NULL) { printf("|%d|",P->Element); P=P->Next; } } void tron2ds(List L1,List L2) { Position P1=L1->Next; Position P2=L2->Next; while(L2->Next!=NULL) { // truong hop l2 dai hon l1 thi khi cuoi l1 chi can gan phan //con lai cua l2 cho l1 la xong. // con l1 dai hon l2 thi viet chen cac phan tu l2 vao l1 binh thuong if(P1->Next==NULL&&P2->Element>=P1->Element) { P1->Next=P2; break; } if(P2->Element<P1->Element) // thi chen p2 vao truoc p1 { Position truocp1; //tim p truoc p1 truocp1=L1; while(truocp1->Next!=P1) { truocp1=truocp1->Next; } //tach p2 ra khoi L2 va chen vao L1 o vi tri truoc P1. L2->Next=P2->Next; P2->Next=P1; truocp1->Next=P2; P1=P2; P2=L2->Next; } else //nguoc lai thi P1=P1->Next roi xet tiep de tim vi tri chen cho p2 trong p1 { P1=P1->Next; } } } void main() { clrscr(); List L1,L2; makenulllist(L1); makenulllist(L2); // tao 2 list L1 {1,3,5,7,9} va list L2 {0,2,4,6,8,10} nhu da thay la ca 2 list deu sap xep tang dan for(int i=0;i<=10;i++) { if(i<10) { insertlastlist(L1,i); } else { insertlastlist(L2,i); } } printf("2 DS\n"); printf("L1: "); showlist(L1); printf("\n"); printf("L2: "); showlist(L2); printf("\nSau khi tron L2 vao L1\n"); tron2ds(L1,L2); showlist(L1); getch(); }
Hy vọng hữu ích với bạn!
Nosomovo