diff --git a/merge.c b/merge.c new file mode 100644 index 0000000000..19459159be --- /dev/null +++ b/merge.c @@ -0,0 +1,35 @@ +/** + * Definition for singly-linked list. + * struct ListNode { + * int val; + * struct ListNode *next; + * }; + */ + +struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) { + // Create a dummy node to simplify handling the head + struct ListNode dummy; + struct ListNode* tail = &dummy; + dummy.next = NULL; + + // Traverse both lists + while (list1 != NULL && list2 != NULL) { + if (list1->val < list2->val) { + tail->next = list1; + list1 = list1->next; + } else { + tail->next = list2; + list2 = list2->next; + } + tail = tail->next; + } + + // Attach remaining nodes + if (list1 != NULL) { + tail->next = list1; + } else { + tail->next = list2; + } + + return dummy.next; +}