合并两个排序的链表---递归实现
2015-12-14 21:26
555 查看
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。代码实现:
#include <stdio.h> #include <stdlib.h> typedef struct node { int value; struct node *next; }LinkList; //创建带头结点的单链表 void CreateList(LinkList *L) { int data; LinkList *p=NULL,*q=L; //p指向新分配的结点,q始终指向链表的尾部 printf("input the data: "); while(scanf("%d",&data) !=EOF) { p=(LinkList*)malloc(sizeof(LinkList)); p->value=data; p->next=NULL; q->next=p; q=p; } } LinkList *Merge(LinkList *pHead1,LinkList *pHead2) { if(pHead1==NULL) return pHead2; if(pHead2==NULL) return pHead1; LinkList *pMergeHead=NULL; if(pHead1->value < pHead2->value) { pMergeHead=pHead1; pMergeHead->next=Merge(pHead1->next,pHead2); } else { pMergeHead=pHead2; pMergeHead->next=Merge(pHead1,pHead2->next); } return pMergeHead; } void output(LinkList *L) { LinkList *p=L; while(p!=NULL) { printf("%d\t",p->value); p=p->next; } } int main() { LinkList *a=(LinkList*)malloc(sizeof(LinkList)); LinkList *b=(LinkList*)malloc(sizeof(LinkList)); CreateList(a); CreateList(b); LinkList *pHead1=a->next; LinkList *pHead2=b->next; output(Merge(pHead1,pHead2)); return 0; }
相关文章推荐
- Linux centOS下安装配置openfire
- 各种数据结构的访问优缺点
- js window.open() 父窗口与子窗口的互相调用(未必有用)
- 第三天
- DDuilib入门-XML布局【二】
- Android:AsyncTask 随记
- 1013. 数素数 (20)
- 黑马程序员——java 集合
- 读书笔记 -- 008_数据挖掘_聚类_基于层次的方法
- Apache Commons 工具集
- 不明白现在的面试官为什么都喜欢问些不该问的问题
- python模块介绍-locustio:性能测试工具locustio
- Jdbc和Odbc基本操作
- Scala Case Class介绍
- 二叉树——查找两个随机节点最近的祖先
- 去除标题栏和全屏的方法
- 团队作业--Beta版本冲刺
- Nginx基本命令
- 数据结构C++语言实现——图
- Spring中ApplicationContext对事件传递