leetcode21
2015-10-06 22:25
197 查看
LeetCode21 ----------Merge Two Sorted Lists
将两个有序链表合并成一个有序链表。
这是当初学数据结构时一个非常重要的链表操作了。
思路很简单。
首先如果其中一个为空,返回另一个。
分别比较两个链表的元素,分为三种情况:
前两种分别是,将指针1向右移动或将指针2向右移动。
当两值相等时,要同时插入两个元素,并同时移动两个指针。
最后:
当某一指针指向空时,要将另一条链表的剩余部分插入到结果链表中。
这里也需要注意头指针,在LeetCode中返回的链表都是不带头结点的头指针
代码:
将两个有序链表合并成一个有序链表。
这是当初学数据结构时一个非常重要的链表操作了。
思路很简单。
首先如果其中一个为空,返回另一个。
分别比较两个链表的元素,分为三种情况:
前两种分别是,将指针1向右移动或将指针2向右移动。
当两值相等时,要同时插入两个元素,并同时移动两个指针。
最后:
当某一指针指向空时,要将另一条链表的剩余部分插入到结果链表中。
这里也需要注意头指针,在LeetCode中返回的链表都是不带头结点的头指针
代码:
class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { if (l2 == NULL) return l1; if (l1 == NULL) return l2; ListNode *head=new ListNode(0); ListNode *r = head; while (l1 && l2) { if (l1->val == l2->val) { ListNode*p1 = new ListNode(l1->val); ListNode*p2 = new ListNode(l2->val); r->next = p1; r = p1; r->next = p2; r = p2; l1 = l1->next; l2 = l2->next; } else if (l1->val < l2->val) { ListNode*p1 = new ListNode(l1->val); r->next = p1; r = p1; l1 = l1->next; } else { ListNode*p2 = new ListNode(l2->val); r->next = p2; r = p2; l2 = l2->next; } } if (!l1) { r->next = l2; } else { r->next = l1; } ListNode * p = head; head = head->next; delete p; return head; } };
相关文章推荐
- 差分进化算法-python实现
- 求两个链表的并集
- 002C语言 验证无标度网络的幂律定律
- 操作系统维护相关总结
- C++中智能指针的工作原理和简单实现
- uva 11181 概率与排列
- java复习:线程间通信
- iOS大典之地图Map Kit
- JavaScript高级程序设计第23章(离线应用与客户端存储)
- UVA Live Archive 4490 Help Bubu(状压dp)
- dubbox使用
- 2-SAT 及 一点习题
- 对话框
- poj 3468 A Simple Problem with Integers(区间更新 区间求和)
- HTML5与移动端web学习笔记
- 多个字段修改
- 四则运算
- 简单遗传算法-python实现
- HTML 常用头部标签(meta)
- C#把时间秒数转化成时间格式字符串00:00:00