LeetCode | Merge Two Sorted Lists
2016-08-12 16:05
477 查看
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.
合并两个有序的单链表,题目本身并不是很难。
这样的复杂度貌似是O(m*n)?
注意如果两个链表不一样长,最后的部分是不需要再次排序的,因为已经有序并且next指针都没问题。
不过不知道为什么这三种跑出来的用时都是一样的,beat 9.75%
合并两个有序的单链表,题目本身并不是很难。
思路1、链表插入排序
从l1中选取出第一个可以插入数据的位置,将l2的数据依次插入。这样的复杂度貌似是O(m*n)?
思路2、新开一个链表,选择排序
新开一个root,每次选取l1或者l2的第一个元素,复杂度O(m+n)。注意如果两个链表不一样长,最后的部分是不需要再次排序的,因为已经有序并且next指针都没问题。
思路3、递归
递归的思路想起来有点别扭,一般也很少网这个方向想,其思路也是类似思路2的排序,只不过变成了递归操作。不过不知道为什么这三种跑出来的用时都是一样的,beat 9.75%
class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { // ListNode root(-1); // root.next=l1; // //遍历这个l2链表 // while(l2){ // ListNode* l2next=l2->next; // //遍历整个链表 // ListNode* cur=&root; // for(;cur->next;cur=cur->next){ // if(cur->next->val>l2->val) break; // } // //更改链表指向 // l2->next=cur->next; // cur->next=l2; // l2=l2next; // } // return root.next; // //应当有O(N)的做法 // ListNode root(-1); // ListNode* cur=&root; // for(;l1 && l2;){ // if(l1->val < l2->val){ // cur->next=l1; // cur=l1; // l1=l1->next; // } // else{ // cur->next=l2; // cur=l2; // l2=l2->next; // } // } // cur->next=l1?l1:l2; // //以下实际上是不需要的,因为链表内部的节点顺序已经排好了 // // while(l1){ // // cur->next=l1; // // cur=l1; // // l1=l1->next; // // } // // while(l2){ // // cur->next=l2; // // cur=l2; // // l2=l2->next; // // } // return root.next; //尝试写一个递归的 if(!l1 || !l2) return l1?l1:l2; if(l1->val < l2->val){ l1->next=mergeTwoLists(l1->next,l2); return l1; } l2->next=mergeTwoLists(l1,l2->next); return l2; } };
相关文章推荐
- leetcode 21. Merge Two Sorted Lists(C语言,合并两个排序的链表为一个排序链表)32
- LeetCode Merge Two Sorted Lists
- LeetCode-21-Merge Two Sorted Lists(链表/归并)-Easy
- LeetCode之Merge Two Sorted Lists
- leetcode-21 Merge Two Sorted Lists
- LeetCode 21. Merge Two Sorted Lists
- Leetcode 21. Merge Two Sorted Lists
- LeetCode 21 - Merge Two Sorted Lists
- leetcode 21. Merge Two Sorted Lists
- LeetCode Merge Two Sorted Lists
- leetcode Merge Two Sorted Lists
- (Java)LeetCode-21. Merge Two Sorted Lists
- Merge Two Sorted Lists--LeetCode
- LeetCode ---Merge Two Sorted Lists
- LeetCode:Merge Two Sorted Lists
- Leetcode Problem.21—Merge Two Sorted Lists
- LeetCode刷题(C++)——Merge Two Sorted Lists(Easy)
- leetcode Merge Two Sorted Lists
- 【LeetCode】Merge Two Sorted Lists
- leetcode_21_Merge Two Sorted Lists