题目
方法一 递归
思路:递归,返回较小值的节点
关键:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* @brief merge two lists
* @param[in] l1
* @param[in] l2
* @return the node to be merged
*/
struct ListNode *mergeTwoLists(struct ListNode *l1, struct ListNode *l2)
{
// 返回较小值的节点
if (l1 == NULL) {
return l2;
} else if (l2 == NULL) {
return l1;
} else if (l1->val < l2->val) {
l1->next = mergeTwoLists(l1->next, l2);
return l1;
} else {
l2->next = mergeTwoLists(l1, l2->next);
return l2;
}
}
方法二 链表
思路:使用哑结点,简单判断并连接
关键:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* @brief merge two lists
* @param[in] l1
* @param[in] l2
* @return the node to be merged
*/
struct ListNode *mergeTwoLists(struct ListNode *l1, struct ListNode *l2)
{
if (l1 == NULL) {
return l2;
} else if (l2 == NULL) {
return l1;
}
// 1. 哑结点, used to points to the head node
struct ListNode *dummy = (struct ListNode *)malloc(sizeof(struct ListNode));
struct ListNode *temp = dummy;
while (l1 != NULL && l2 != NULL) {
if (l1->val <= l2->val) {
temp->next = l1;
l1 = l1->next;
} else {
temp->next = l2;
l2 = l2->next;
}
temp = temp->next;
}
if (l1 != NULL) {
temp->next = l1;
}
if (l2 != NULL) {
temp->next = l2;
}
temp = dummy->next;
free(dummy);
return temp;
}