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;
}