数据结构练习1——链表合并
2015-10-28 22:22
465 查看
#include<stdio.h> #include<malloc.h> #pragma warning(disable:4996) typedef struct node { int data; struct node *link; }LNode,*LinkList; int main() { char c; int num;//读取数字 LinkList list1, list2, p, q, r; //建立两个链表 list1 = list2 = NULL; c = '0'; r = (LinkList)malloc(sizeof(LNode)); while (c != '\n') { scanf("%d", &num); scanf("%c", &c);//读取数字后的符号 p = (LinkList)malloc(sizeof(LNode)); p->data = num; p->link = NULL; if (list1 == NULL) { //链表为空 list1 = p; r = p; } else { r->link = p; r = p; } } c = '0'; //读取第二个链表 while (c != '\n') { scanf("%d", &num); scanf("%c", &c);//读取数字后的符号 p = (LinkList)malloc(sizeof(LNode)); p->data = num; p->link = NULL; if (list2 == NULL) { //链表为空 list2 = p; r = p; } else { r->link = p; r = p; } //这里注意链表的结尾 r->link = NULL;//后来发现其实不写这句也没关系 因为p->link 已经是链表的结尾了 } //开始比较 p = (LinkList)malloc(sizeof(LNode)); q = (LinkList)malloc(sizeof(LNode)); p = list1; q = list2; while (p!= NULL&&q!= NULL) { if ((p->data) < (q->data)) { printf("%d ", p->data); p = p->link; } else if ((p->data) > (q->data)) { printf("%d ", q->data); q = q->link; } else { printf("%d ", p->data); p = p->link; q = q->link; } } if ((p != NULL)||(q != NULL)) { while (p!=NULL) { printf("%d ", p->data); p = p->link; } while (q != NULL) { printf("%d ", q->data); q = q->link; } } printf("\n"); //释放 return 0; }
相关文章推荐
- 链表的基本操作
- Redis之SkipList数据结构
- Redis之ziplist数据结构
- Redis之intset数据结构
- Redis之Hash数据结构
- Sting 串实现
- 数据结构笔试题---栈
- 数据结构排序之快速排序
- 数据结构 — 5.二叉树层次遍历
- 中国大学MOOC-陈越、何钦铭-数据结构 排序(堆排序)
- 中国大学MOOC-陈越、何钦铭-数据结构 排序(希尔排序)
- 双向链表实现
- 数据结构问题集锦 - Basic Calculator
- 【数组项目1 - 猴子选大王(数组版)——第9周】
- 第7周SHH数据结构—【项目4 - 队列数组】
- 《数据结构(严蔚敏版)》学习笔记(一)——常用数据结构定义:
- 数据结构实验之二叉树的建立与遍历
- 第7周SHH数据结构—【项目3 - 负数把正数赶出队列 】
- 数据结构学习(二)字符倒序输出的C语言实现
- 数据结构与算法面试题80道