题目
菜鸟解答
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
struct ListNode tmp_head;
struct ListNode *scan_l1 = l1;
struct ListNode *scan_l2 = l2;
struct ListNode *scan_tmp = &tmp_head;
if (NULL == l1 && NULL == l2)
return NULL;
while (scan_l1 != NULL && scan_l2 != NULL) {
if (scan_l1->val <= scan_l2->val) {
scan_tmp->next = scan_l1;
scan_l1 = scan_l1->next;
}
else {
scan_tmp->next = scan_l2;
scan_l2 = scan_l2->next;
}
scan_tmp = scan_tmp->next;
}
scan_tmp->next = scan_l1 == NULL ? scan_l2 : scan_l1;
return tmp_head.next;
}
围观评论区-- 递归解法
是不是大神都喜欢递归…ORZ
原链接为:https://leetcode-cn.com/problems/merge-two-sorted-lists/solution/he-bing-liang-ge-you-xu-lian-biao-by-leetcode/
/*递归: 对于当前层的操作 : val小的节点的next 重定向为下一层的返回值 每层的返回节点为val较小的那个*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
if (NULL == l1)
return l2;
if (NULL == l2)
return l1;
if (l1->val <= l2->val) {
l1->next = mergeTwoLists(l1->next,l2);
return l1;
}
else {
l2->next = mergeTwoLists(l1,l2->next);
return l2;
}
}