close

/* 資料結構#鏈結串列#串列合併 
串列的合併 
(1) 用GenList 產生 l1和 l2
(2) 將 l1和 l2合併 
*/
#include <stdio.h>
#include <stdlib.h>

struct Node {
        int data;
        Node *next;
};

int TravelList(Node *p) {  //串列的
   do 
   {
      printf("%4d ", p->data);                     
   }
   while ( (p = p->next)  !=NULL);
   return(1);
}

Node *EndOfList(Node *p) // 找串列的結尾,回傳最後一個點的指標 
{  Node *e;
   do 
   {  e=p;  }
   while ( (p = p->next)  !=NULL);
   return(e);
}

Node *rEndOfList(Node *p) // 找串列的結尾,回傳最後一個點的指標 
{  
   if(p->next!=NULL) return(rEndOfList(p->next));
   else return(p);
}

void ListMerge(Node *L1,Node *L2){
    Node *EndOfL1;
    EndOfL1=rEndOfList(L1); // OR EndOfL1=EndOfList(L1);
    EndOfL1->next=L2;
}

Node *GenList(int n){ //產生一個串列  
    Node *start,*end,*p;

    start = new Node;
    start->data=0;//start.data
    start->next=NULL;
    
    end = start;
    
    for(int i=1;i<n;i++){
        p = new Node;
        end->next=p;
        p->data=rand()%1000;
        p->next=NULL;
        
        end=p;
    }
    return start;    
}
int main() {
    
    Node *l1,*l2,*e1;;
    printf("\nList 1: \n");
    l1=GenList(3);
    TravelList(l1);
    printf("\nList 2: \n");
    l2=GenList(5);
    TravelList(l2);
    
    ListMerge(l1,l2);    
    printf("\n List1: List1+List 2: \n");
    TravelList(l1);
    
    printf("\n \n"); system("pause");
    return (1);
}
 

arrow
arrow
    創作者介紹
    創作者 tatar 的頭像
    tatar

    ppper 的部落格

    tatar 發表在 痞客邦 留言(0) 人氣()