Given two linked lists, insert nodes of second list into first list at alternate positions of first list.
Read full article from Merge a linked list into another linked list at alternate positions | GeeksforGeeks
void merge(struct node *p, struct node **q){ struct node *p_curr = p, *q_curr = *q; struct node *p_next, *q_next; // While therre are avialable positions in p while (p_curr != NULL && q_curr != NULL) { // Save next pointers p_next = p_curr->next; q_next = q_curr->next; // Make q_curr as next of p_curr q_curr->next = p_next; // Change next pointer of q_curr p_curr->next = q_curr; // Change next pointer of p_curr // Update current pointers for next iteration p_curr = p_next; q_curr = q_next; } *q = q_curr; // Update head pointer of second list}