LeetCode--Merge Two Sorted Lists
2017-07-23 11:29
435 查看
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
方法一:新建一个单链表,比较l1和l2的节点元素大小,按顺序依次选择较小的放入,直到没有可比的节点时,剩下的l1或者l2的节点就是最大的那些。
方法二:递归法。有点难想,但是十分巧妙简洁。第一次比较节点元素大小后,可以每次递归调用合并函数,把合并后的结果放在较小的节点后面,再返回即可。
4000
方法一:新建一个单链表,比较l1和l2的节点元素大小,按顺序依次选择较小的放入,直到没有可比的节点时,剩下的l1或者l2的节点就是最大的那些。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode dummy(0); ListNode *tail=&dummy; while(l1&&l2){ if(l1->val<l2->val){ tail->next=l1; l1=l1->next; } else{ tail->next=l2; l2=l2->next; } tail=tail->next; } tail->next=l1?l1:l2; return dummy.next; } };
方法二:递归法。有点难想,但是十分巧妙简洁。第一次比较节点元素大小后,可以每次递归调用合并函数,把合并后的结果放在较小的节点后面,再返回即可。
class Solution { public: ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) { if(l1 == NULL) return l2; if(l2 == NULL) return l1; if(l1->val < l2->val) { l1->next = mergeTwoLists(l1->next, l2); return l1; } else { l2->next = mergeTwoLists(l2->next, l1); return l2; } } };
4000
相关文章推荐
- Leetcode 21. Merge Two Sorted Lists(C++)
- LeetCode - 21. Merge Two Sorted Lists
- LeetCode小白菜笔记[7]:Merge Two Sorted Lists
- LeetCode刷题笔录 Merge Two Sorted Lists
- [Leetcode]_21 Merge Two Sorted Lists
- Leetcode 21. Merge Two Sorted Lists
- [Leetcode] Merge Two Sorted Lists (Java)
- C实现 LeetCode->Merge Two Sorted Lists (双指针大法)
- 【LeetCode】Merge Two Sorted Lists
- LeetCode之Merge Two Sorted Lists
- LeetCode Merge Two Sorted Lists
- 【LeetCode】Merge Two Sorted Lists
- 面试题17:合并两个有序链表(Leetcode-21:Merge Two Sorted Lists)
- 25_leetcode_ Merge Two Sorted Lists
- Merge Two Sorted Lists - LeetCode
- LeetCode——Merge Two Sorted Lists
- Merge Two Sorted Lists_Leetcode_#21
- 【LeetCode】21 - Merge Two Sorted Lists
- 【leetcode】Merge Two Sorted Lists
- leetcode Merge Two Sorted Lists