leetcode 21 Merge Two Sorted Lists
2015-06-05 21:59
148 查看
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.
我的解决方案:
递归c++解法:
python递归解决方案:
python非递归:
python递归解决方案2:
我的解决方案:
/** * 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) { if(NULL==l1) return l2; if(NULL==l2) return l1; ListNode* head = NULL; if(l1->val < l2->val) { head = l1; l1 = l1->next; } else { head = l2; l2 = l2->next; } ListNode* p = head; // pointer to form new list while(l1!=NULL&&l2!=NULL) { if(l1->val < l2->val) { p->next = l1; l1 = l1 ->next; } else { p->next = l2; l2 = l2 ->next; } p = p->next; } if(l1) { p->next = l1; } else { p->next = l2; } return head; } };
递归c++解法:
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; } } };
python递归解决方案:
def mergeTwoLists(self, l1, l2): if not l1: return l2 elif not l2: return l1 else: if l1.val <= l2.val: l1.next = self.mergeTwoLists(l1.next, l2) return l1 else: l2.next = self.mergeTwoLists(l1, l2.next) return l2
python非递归:
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: # @param {ListNode} l1 # @param {ListNode} l2 # @return {ListNode} def mergeTwoLists(self, l1, l2): p1 = l1 p2 = l2 guard = ListNode(0) q = guard while p1 is not None and p2 is not None: if p1.val <= p2.val: q.next = p1 p1 = p1.next q = q.next else: q.next = p2 p2 = p2.next q = q.next if p1 is not None: q.next = p1 if p2 is not None: q.next = p2 return guard.next
python递归解决方案2:
If both lists are non-empty, I first make sure a starts smaller, use its head as result, and merge the remainders behind it. Otherwise, i.e., if one or both are empty, I just return what's there. class Solution: def mergeTwoLists(self, a, b): if a and b: if a.val > b.val: a, b = b, a a.next = self.mergeTwoLists(a.next, b) return a or b
相关文章推荐
- Follow 在地图中使地图和人物一起运动
- Two Substrings
- 矩阵-向量求导法则
- 第十四周 项目一(3):小玩文件
- 参加第八届英特尔软件创新大赛-初赛前
- FragmentPagerAdapter
- HDU 3584 Cube (三维树状数组)
- [Python] 网络爬虫和正则表达式学习总结
- js获取项目根目录
- 转载: java的接口、类、属性、方法各有哪些修饰符
- Linux Page Cache机制
- Hadoop文件解压缩
- 在 VC6 中使用 GdiPlus-安装
- CSAPP缓冲区溢出攻击实验(上)
- Java模拟抢红包应用
- 面试题:说说Java中接口、类、成员变量、成员方法、构造方法有哪些访问修饰符和他们的作用范围
- AUC与ROC
- Fragement真正的解析
- [Java] Webservice之即时发布JWS教程 (一)
- CSAPP缓冲区溢出攻击实验(上)