【力扣 简单 C】21. 合并两个有序链表
目录
题目
解法一:迭代
解法二:递归
题目
解法一:迭代
struct ListNode* merge(struct ListNode* list1, struct ListNode* list2)
{struct ListNode* virHead = malloc(sizeof(*virHead));struct ListNode* preNode = virHead;while (list1 && list2){if (list1->val < list2->val){preNode->next = list1;list1 = list1->next;}else{preNode->next = list2;list2 = list2->next;}preNode = preNode->next;}preNode->next = list1 ? list1 : list2;struct ListNode* head = virHead->next;free(virHead);return head;
}struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{return merge(list1, list2);
}
解法二:递归
void swap(struct ListNode** list1, struct ListNode** list2)
{struct ListNode* tmp = *list1;*list1 = *list2;*list2 = tmp;
}struct ListNode* merge(struct ListNode* list1, struct ListNode* list2)
{if (!list1)return list2;if (!list2)return list1;if (list1->val > list2->val)swap(&list1, &list2);list1->next = merge(list1->next, list2);return list1;
}struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{return merge(list1, list2);
}