合并两个有序单链表
来源:互联网 发布:单片机正弦波 编辑:程序博客网 时间:2024/05/29 08:07
把两个有序单链表合并为一个,在网上查了不少相关文章,觉得有一篇写的比较好,但是感觉有两行代码写错了
原帖:http://fayaa.com/code/view/12171/
我自己改了一下
#include <stdio.h>#include <string.h>#include <stdlib.h>typedef struct _Node{int value;struct _Node *next;}Node, *PNode;PNode BuildLink(int n, int *pi); //构造一个节点数为n的链表PNode MergeLink(PNode p1, PNode p2);//合并void OutputLink(PNode ph);int main(){int a[] = {2, 4, 9, 12, 45, 78,100};int b[] = {3, 4, 11, 29, 55, 120, 200, 222};PNode p1 = BuildLink(sizeof(a)/sizeof(int), a);PNode p2 = BuildLink(sizeof(b)/sizeof(int), b);OutputLink(p1);OutputLink(p2);PNode pMerge(p1, p2);OutputLink(pMerge);getchar();return 0;}PNode BuildLink(int n, int *pi) //建立链表{int i;PNode ph = Null, pn; //ph头指针,pn当前结点for(i=0; i<n; i++){if(!(pn=(PNode)malloc(sizeof(PNode)))) //分配空间{printf("malloc error.\n");return(1);}pn->value = *(pi+n-i-1); //链表的插入算法pn->next = ph;ph->next = pn;}return ph;}void OutputLink(PNode ph){while(ph){printf("%d ", ph->value);ph = ph->next;}printf("\n");}PNode MergeLinkK(PNode p1, PNode p2) //不需要再分配空间,只使用原有p1,p2的空间{if(!p1) return p2; //如果一个链表为空,返回另一个if(!p2) return p1;PNode ph, p; //p指向合并后的链表的当前节点if(p1->value < p2->value) // 如果p1<p2,以p1为基础建立{ph = p1;p = p1;p1 = p1->next;}else{ph = p2;p = p2;p2 = p2->next;}while(p1 && p2) //p1,p2 不为空{if(p1->value < p2->value) //插入节点{p->next = p1;p = p1;p1 = p1->next;}else{p->next = p2;p = p2;p2 = p2->next;}}if(!p1) p->next = p2;if(!p2) p->next = p1;return ph;}
- 合并两个有序单链表
- 合并两个有序单链表
- 合并两个有序单链表
- 两个有序单链表合并
- 合并两个有序单链表
- 合并两个有序单链表
- 合并两个有序单链表
- 合并两个有序单链表
- 两个有序单链表的合并&两个有序数组的合并
- 两个有序单链表的合并
- 合并两个有序的单链表
- 将两个有序单链表合并
- 合并两个有序的单链表
- 合并两个有序的单链表
- 合并两个有序单链表C++
- java 合并两个有序单链表
- 合并两个有序的单链表
- 合并两个有序的单链表
- python 文件读写
- html中字体,特殊字符和标签如何显示呢?
- SQL Server数据类型
- Android Widget 简单例程(mp3播放)
- 云计算简单知识整理
- 合并两个有序单链表
- POJ 3252 Round Numbers
- OEM,ODM,OBM是什么??
- web中的checkbox以及strtus2的CheckboxInterceptor
- 值得参考的 10 个 LESS CSS 实例
- 原创伤感qq日志-早已习惯两指之间夹着烟的孤单
- 媒体MediaPlayer错误详细解析
- CoUninitialize 退出时 m_pInterface->Release()崩溃 解决
- IOS-沙盒机制和用户文件操作