eccolo qua per intero:
codice:
#include<stdio.h>
struct list{
int i;
struct list *nextPtr;
};
typedef struct list List;
typedef List *List1Ptr;
void insert(List1Ptr *sPtr, int val);
void printL(List1Ptr currPtr);
List1Ptr merge(List1Ptr *s1Ptr, List1Ptr *s2Ptr);
int main(void)
{
List1Ptr start1Ptr=NULL;
List1Ptr start2Ptr=NULL;
List1Ptr start3Ptr=NULL;
int i;
for(i=0;i<20;i++){
if(i%2==0){
insert(&start1Ptr,i);
}
else insert(&start2Ptr,i);
}
printL(start1Ptr);
printL(start2Ptr);
start3Ptr=merge(&start1Ptr,&start2Ptr);
printL(start3Ptr);
return 0;
}
void insert(List1Ptr *sPtr, int val)
{
List1Ptr newPtr;
List1Ptr prevPtr;
List1Ptr currPtr;
newPtr=malloc(sizeof(List));
if(newPtr!=NULL){
newPtr->i=val;
newPtr->nextPtr=NULL;
prevPtr=NULL;
currPtr=*sPtr;
while(currPtr!=NULL&&val>currPtr->i){
prevPtr=currPtr;
currPtr=currPtr->nextPtr;
}
if(prevPtr==NULL){
newPtr->nextPtr=*sPtr;
*sPtr=newPtr;
}
else{
prevPtr->nextPtr=newPtr;
newPtr->nextPtr=currPtr;
}
}
else{
printf("%d not inserted. No memory available.\n",val);
}
}
void printL(List1Ptr currPtr)
{
if(currPtr==NULL){
printf("List is empty!\n");
}
else{
printf("The list is: \n" );
while(currPtr!=NULL){
printf("%d--> ", currPtr->i);
currPtr=currPtr->nextPtr;
}
printf("NULL\n\n");
}
}
List1Ptr merge(List1Ptr *s1Ptr, List1Ptr *s2Ptr)
{
List1Ptr firstPtr;
List1Ptr secPtr;
List1Ptr newPtr;
List1Ptr currPtr;
List1Ptr prevPtr;
newPtr=malloc(sizeof(List));
firstPtr=*s1Ptr;
secPtr=*s2Ptr;
currPtr=newPtr;
if(firstPtr!=NULL&&secPtr!=NULL){
if(firstPtr->i > secPtr->i){
currPtr->i=secPtr->i;
currPtr=currPtr->nextPtr;
currPtr->i=firstPtr->i;
secPtr=secPtr->nextPtr;
firstPtr=firstPtr->nextPtr;
currPtr=currPtr->nextPtr;
}
else{
currPtr->i=firstPtr->i;
currPtr=currPtr->nextPtr;
currPtr->i=secPtr->i;
secPtr=secPtr->nextPtr;
firstPtr=firstPtr->nextPtr;
currPtr=currPtr->nextPtr;
}
if(firstPtr==NULL&&secPtr!=NULL){
currPtr->i=secPtr->i;
currPtr=currPtr->nextPtr;
secPtr=secPtr->nextPtr;
}
if(secPtr==NULL&&firstPtr!=NULL){
currPtr->i=firstPtr->i;
currPtr=currPtr->nextPtr;
firstPtr=firstPtr->nextPtr;
}
}
return newPtr;
}