数据结构 链表 合并两个有序的单链表 C语言版
2017-08-27 17:07
465 查看
#include <cstdio> #include <stdlib.h> typedef struct Node { int data; struct Node * next; } Node,* Linklist; //定义链表的结点,链表头 void Initlist (Linklist *L) //初始化链表 { *L=(Linklist)malloc(sizeof(Node)); (*L)->next=NULL; } void CreateFromTail(Linklist L) //尾插发建表 { Node *r,*s; r=L; //r总是指向链表的最后结点,s是新的结点 int flag=1; int num; while(flag) { scanf("%d",&num); if(num!= -1) { s=(Node *) malloc(sizeof(Node)); s->data=num; r->next=s; r=s; } else{ flag=0; r->next=NULL; } } return ; } void Output(Linklist L) //输出单链表 { Node *temp; temp=L->next; while(temp !=NULL) { printf("%d ",temp->data); temp=temp->next; } printf("\n"); } Linklist Unionlist(Linklist LA,Linklist LB) { Linklist LC; Initlist(&LC); Node *pa,*pb,*r; pa=LA->next; pb=LB->next; r=LC; while(pa!=NULL && pb!=NULL) { if(pa->data<=pb->data) { r->next=pa; r=pa; pa=pa->next; } else{ r->next=pb; r=pb; pb=pb->next; } } if(pa) r->next=pa; else r->next=pb; free(LB); free(LA); return(LC); } int main() { Linklist LA,LB,LC; Initlist(& LA); Initlist(& LB); printf("输入递增单链表LA 以-1为结束标志\n"); CreateFromTail(LA); Output(LA); printf("输入递增单链表LB 以-1为结束标志\n"); CreateFromTail(LB); Output(LB); if(LA->next==NULL) printf("srwefewfawefw\n"); LC=Unionlist(LA,LB); printf("合并为一个有序的单链表为\n"); Output(LC); }
相关文章推荐
- 数据结构_中国大学MOOC(慕课)——两个有序链表序列的合并问题
- [数据结构]02-线性结构1 两个有序链表序列的合并
- c语言版数据结构(奇迹冬瓜)-链表实战(2)合并两有序线性表
- 数据结构 02-线性结构1 两个有序链表序列的合并
- 数据结构之将两个递增的有序链表合并为一个递增的有序链表
- c语言数据结构中两个有序链表合并为一个新链表
- 【MOOC—数据结构习题】两个有序链表序列的合并
- PTA数据结构之两个有序链表序列的合并
- 02-线性结构1 两个有序链表序列的合并——中国大学MOOC-陈越、何钦铭-数据结构-2017秋
- 2-11. 两个有序链表序列的合并(15):链表数据结构基础练习
- 【C语言版数据结构】线性表的链式表示,并且实现合并两个非递减有序排列到新的线性表
- PAT数据结构_02-线性结构1 两个有序链表序列的合并 (15分)
- 合并两个有序的单链表
- PATl两个有序链表序列的合并
- C++实现两个有序链表合并(17)---《那些奇怪的算法》
- 6-4 两个有序链表序列的合并
- 经典算法——合并两个有序链表
- 合并两个有序的链表为一个有序的链表
- 已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序。(保留所有结点,即便大小相同)
- 合并两个有序链表后组成一个更大一个有序链表