合并两个有序单链表
2017-05-18 18:48
309 查看
#include<stdio.h> #include <malloc.h> typedef struct linknode { int data; linknode *next; } Node,*Linklist;//Linklist表示结构体指针 Linklist CreateList_end(int n);//尾插法建立链表 Linklist MergeLinklist(Linklist LA,Linklist LB);//将两个非递减的有序单链表合并成一个单链表 void ShowList(Linklist L);//输出链表内容 int main(void) { Linklist L1,L2,L; int n; scanf("%d",&n); L1=CreateList_end(n); L2=CreateList_end(n); L=MergeLinklist(L1,L2); ShowList(L); return 0; } Linklist CreateList_end(int n) { Linklist head=(Linklist)malloc(sizeof(Node)); Node *p,*e; p=head; int x; for(int i=0; i<n; i++)//尾插法建立链表 { e=(Linklist)malloc(sizeof(Node)); scanf("%d",&x); e->data=x; p->next=e; p=e; } p->next=NULL;//将链表的最后一个节点的指针域置空 return head; } void ShowList(Linklist L)//输出链表内容 { L=L->next; while(L) { printf("%d ",L->data); L=L->next; } printf("\n"); } Linklist MergeLinklist(Linklist LA,Linklist LB)//将两个非递减的有序单链表合并成一个单链表 { Node *pa,*pb; Linklist LC,r;//将LC初始置空表。pa和pb分别指向两个单链表LA和LB中的第一个节点,r初始值为LC且r始终指向LC的表尾。 pa=LA->next; pb=LB->next; LC=LA; LC->next=NULL; r=LC; while(pa!=NULL&&pb!=NULL)//当两个表中均为处理完时,比较选择将较小值节点插入到新表LC中 { if(pa->data<=pb->data) { r->next=pa; r=pa; pa=pa->next; } else { r->next=pb; r=pb; pb=pb->next; } } if(pa)//若表LA未完,将表LA中后续元素链到新表LC表尾。 r->next=pa; else r->next=pb;//否则将表LA中后续元素链到新表LC表尾。 free(LB); return LC; }
相关文章推荐
- 合并两个有序单链表
- 合并两个有序单链表,合并后依旧有序
- 两个有序单链表合并成一个有序单链表的java实现
- 两个有序单链表的合并&两个有序数组的合并
- 合并两个单链表为递减有序的单链表
- 输入两个数列,分别以某数为结束标志,分别生成递增有序单链表;再将这两个表合并为一个递增有序单链表,输出表中各结点的值
- 微软暑期实习笔试题 合并两个有序单链表
- 9、单链表的合并,两个有序单链表,合并为一个有序链表。
- 两个有序单链表合并成一个有序单链表的java实现
- 两个无序单链合并成一个有序单链表
- Java 非递归 和非递归方法 实现两个有序单链表的合并
- 数据结构 — 1. 两个非递减有序单链表合并为非递增有序单链表
- 合并两个有序单链表的递归方法
- 两个有序单链表的合并
- Java单链表基本操作(八)--合并两个有序单链表
- 面试题---两个有序单链表的合并
- 合并两个有序单链表,使得合并后的链表仍然有序
- java 合并两个有序单链表
- 合并两个有序单链表(Java)
- LeetCode 21. Merge Two Sorted Lists 合并两个有序单链表 C++