How to trace the below program?
p and q are the starting address of two different linked list
struct node*Do(struct node*p,struct node*q){
struct node*ps,*qs;
if(!p){
return(q);
}
else if(!q){
return(p);
}
else{
ps=p->link;
qs=q->link;
p->link=q;
q->link=Do(ps,qs);
return(p);
}
}