【数据结构-单链表】单链表的归并
来源:互联网 发布:ubuntu自带中文输入法 编辑:程序博客网 时间:2024/06/10 04:56
问题描述:有两个单链表,按从小到大的顺序排列,先将两链表按从小到大的顺序合并。且所用的存储空间最小。
//单链表的合并 #include<stdio.h>#include<stdlib.h>typedef struct node{ int date; struct node *next;}Lnode,*Pnode;//初始化单链表Pnode init_create_Linklist(void){ Pnode H; H=(Pnode)malloc(sizeof(Lnode)); if(H){ H->next=NULL; } return H;}//尾插法新建单链表Pnode tail_Build_Linklist(Pnode H,int length){ Pnode p,q; q=H; for(int i=1;i<=length;i++){ p=(Pnode)malloc(sizeof(Lnode)); scanf("%d",&p->date); q->next=p; q=p; } q->next=NULL; return H;}//打印单链表void print_Linklist(Pnode H){ Pnode p; p=H->next; while(p!=NULL){ printf("%d->",p->date); p=p->next; }}Pnode merge_Linklist(Pnode A,Pnode B){ Pnode C,p,q,R; p=A->next; q=B->next; C=A; free(B); while(p&&q){ if(p->date<q->date){ R=p; C->next=R; C=C->next; p=p->next; }else{ R=q; C->next=R; C=C->next; q=q->next; }} if(p){ C->next=p; } if(q){ C->next=q; } return A;}int main(void){ Pnode H1,H2,H; H1=init_create_Linklist(); H1=tail_Build_Linklist(H1,3); print_Linklist(H1); H2=init_create_Linklist(); H2=tail_Build_Linklist(H2,3); print_Linklist(H2); H=merge_Linklist(H1,H2); print_Linklist(H); return 0;}
总结一下细节:单链表问题主要有三个方面要注意
1.指针的指向问题,即逻辑思路。(指针基础)
2.更新问题,即存储顺序。(小细节)
3.健壮性问题
3.1减少假设。对内存分配时要验证分配是否成功。
3.2临界状态的验证问题。大于表长或者循环退出的条件分析或者具体问题头尾结点的处理问题。
0 0
- 【数据结构-单链表】单链表的归并
- 单链表的归并(数据结构)
- 数据结构 线性表 单链表的归并
- 数据结构 归并排序的实现
- 单链表的归并算法
- 单链表的归并排序
- 单链表的归并排序
- 单链表的归并1
- 单链表的归并排序
- 单链表的归并排序
- 单链表的归并排序
- 单链表的归并排序
- 单链表的归并排序
- 单链表的归并排序
- 单链表的归并排序
- 单链表的归并排序
- 2-5-归并链式存储的单链表-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- 2-10-归并扩展的线性单链表-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- 实现jul 日志重定向到 slf4j
- 给TextView底部添加横线
- 设计模式分类
- UnsatisfiedLinkError UnsatisfiedLinkError报错的问题
- 究竟什么是RSSI
- 【数据结构-单链表】单链表的归并
- 深入理解乐观锁与悲观锁
- BZOJ2301 容斥原理,莫比乌斯反演
- Activiti流程变量
- Mac锁屏不睡眠
- String
- 在MapReduce的Map和Reduce过程中使用自定义数据类型
- static关键字和const关键字的作用
- 这个不完美的世界:败坏的造物