#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode {
int data;
struct ListNode* next;
} ListNode;
ListNode* createNode(int value) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->data = value;
newNode->next = NULL;
return newNode;
}
ListNode* mergeLists(ListNode* LA, ListNode* LB) {
ListNode* LC = NULL;
ListNode* tail = NULL;
while (LA || LB) {
ListNode* newNode;
if (LA && LB) {
newNode = createNode(LA->data);
LA = LA->next;
} else if (LA) {
newNode = createNode(LA->data);
LA = LA->next;
} else {
newNode = createNode(LB->data);
LB = LB->next;
}
if (!LC) {
LC = newNode;
tail = newNode;
} else {
tail->next = newNode;
tail = tail->next;
}
}
return LC;
}
void printList(ListNode* head) {
while (head) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
void freeList(ListNode* head) {
ListNode* temp;
while (head) {
temp = head;
head = head->next;
free(temp);
}
}
int main() {
ListNode* LA = createNode(1);
LA->next = createNode(3);
LA->next->next = createNode(5);
ListNode* LB = createNode(2);
LB->next = createNode(4);
LB->next->next = createNode(6);
ListNode* LC = mergeLists(LA, LB);
printList(LC);
freeList(LA);
freeList(LB);
freeList(LC);
return 0;