合并两个排好序的单向链表
来源:互联网 发布:lv为什么那么贵 知乎 编辑:程序博客网 时间:2024/04/29 07:53
Node* mergeLists(Node *a, Node *b){if (a == NULL){return b;}if (b == NULL){return a;}Node *head = NULL;if (a->value < b->value){head = a;a = a->next;}else{head = b;b = b->next;}Node *prev = head;while (a && b){if (a->value < b->value){prev->next = a;prev = a;a = a->next;}else{prev->next = b;prev = b;b = b->next;}}if (a){prev->next = b;}else{prev->next = a;}return head;}
更进一步:合并两个已经排序的单链表为一个排序的单链表,相同内容只保留一个
如:单链表a:1->2->3->4
单链表b:3->4->5
输出:1->2->3->4->5
Node* removeDuplicateNodes(Node *a){ if (a == NULL){return NULL;}Node *head = a;Node *p = a->next;Node *prev = a;while (p != NULL){if (p->value == prev->value){prev->next = p->next;delete p;}else{p = p->next;prev = p;}}return head;}Node* mergeLists(Node *a, Node *b){if (NULL == a){return removeDuplicateNodes(b);}if (NULL == b){return removeDuplicateNodes(a);} Node *head = NULL;Node *prev = NULL;if (a->value < b->value){head = a; a = a->next;}else{head = b;b = b->next;} prev = head;while (a != NULL && b != NULL){if (a->value < b->value){ if (a->value == prev->value){Node *temp = a;a = a->next; delete temp;}else{prev->next = a;a = a->next;prev = prev->next;}}else{if (b->value == prev->value){Node *temp = b;b = b->next;delete temp;}else{prev->next = b;b = b->next;prev = prev->next;}}}if (a == NULL){prev->next = removeDuplicateNodes(b);}else{prev->next = removeDuplicateNodes(a);}return head;}
- 合并两个排好序的单向链表
- 两个有序单向链表的合并
- 两个升序单向链表的合并
- 合并两个单向链表
- 合并两个有序单向链表
- 将两个单向有序链表合并成一个单向有序链表
- 单向循环链表的合并图解
- 求两个单向链表的交点
- 求两个单向链表的交点
- 建立单向链表的两个程序
- 查找两个单向链表的交汇点
- 求两个单向链表的交点
- 求两个单向链表的交点
- 02-线性结构1 两个有序链表序列的合并 (15分) (单向链表)
- 合并两个排好序的链表
- 合并两个排好序的链表
- 合并两个已经排好序的链表
- 《单向链表》----------------------合并,反转
- [LeetCode] Single Number II
- 汉诺塔算法c++源代码
- C 语言动态分配数组
- Apache服务器的一些统计命令
- Android Density(密度)
- 合并两个排好序的单向链表
- jQuery php ajax图片上传
- [POJ][1001]Exponentiation
- Oracle 11g修改中文字符集
- 打造轻量级Windows Phone7 游戏引擎-Samurai 第零话 前言
- javascript中对象的销毁
- STL容器
- UVALive 5088 Alice and Bob's Trip(树形DP)
- 《编程之美》2.7 最大公约数问题解法3改进