用C语言合并两个按递增排序的链表
来源:互联网 发布:redis查询数据库命令 编辑:程序博客网 时间:2024/06/07 21:08
最近通过对数据结构的学习,对链表有了更深的认识.在单向链表中,关键是确定下一结点的指针.现在通过一题目详细说明(在VC6.0,WINXP PRO SP2上调试通过)
题目要求:建立两个存放整数的链表,按递增的顺序输入数据.将两个链表合并成一个链表,新链表上中的数据仍然按照递增排序.
程序如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct intnumber
{
int n;
struct intnumber *next;
}INTNUM;
INTNUM *creat(int num)/*建立链表*/
{
INTNUM *p1,*p2,*head;
int i;
p1 = (INTNUM *)malloc(sizeof(INTNUM));
head = p1;
p2 = p1;
for(i = 0;i < num - 1;i++)
{
p1 = (INTNUM *)malloc(sizeof(INTNUM));
p2 ->next = p1;
p2 = p1;
}
p1 ->next = NULL;
return head;
}
void input(INTNUM *head)/*输入链表数据*/
{
INTNUM *p;
p = head;
while(p ->next != NULL)
{
scanf("%d",&(p ->n));
p = p ->next;
}
scanf("%d",&(p ->n));
}
void output(INTNUM *head)/*输出链表数据*/
{
INTNUM *p;
p = head;
while(p ->next != NULL)
{
printf("%d/t",p ->n);
p = p ->next;
}
printf("%d/n",p ->n);
}
void main(void)
{
INTNUM *pa,*pb,*pc,*heada,*headb,*headc;/*pc是指向新链表的指针*/
int counta,countb;/*counta,countb是建立链表的结点数*/
printf("请输入建立A链表的结点数:");
scanf("%d",&counta);
pa = creat(counta);
heada = pa;
printf("请按递增输入A链表结点上的数据:");
input(heada);
printf("打印A链表结点上的数据:/n");
output(heada);
printf("请输入建立B链表的结点数:");
scanf("%d",&countb);
pb = creat(countb);
headb = pb;
printf("请按递增输入B链表结点上的数据:");
input(headb);
printf("打印B链表结点上的数据:/n");
output(headb);
printf("将链表A和链表B仍然按照递增关系合并成一个新的链表C:");
headc = heada;
pc = pa;
pa = pa ->next;
while(pa && pb)
{
if(pa ->n <= pb ->n)
{
pc ->next = pa;
pc = pc ->next;
pa = pa ->next;
}
else
{
pc ->next = pb;
pc = pc ->next;
pb = pb ->next;
}
}
pc ->next = pa ? pa : pb;
printf("打印合并后链表结点上的数据:/n");
output(headc);
}
结果如下:
请输入建立A链表的结点数:3
请按递增输入A链表结点上的数据:1 20 30
打印A链表结点上的数据:
1 20 30
请输入建立B链表的结点数:5
请按递增输入B链表结点上的数据:2 18 22 26 32
打印B链表结点上的数据:
2 18 22 26 32
将链表A和链表B仍然按照递增关系合并成一个新的链表C:打印合并后链表结点上的数据:
1 2 18 20 22 26 30 32
- 用C语言合并两个按递增排序的链表
- C语言——合并两个递增排序链表
- 合并两个递增排序的链表
- 将两个递增的有序链表合并为一个递增的有序链表(C语言编程实现)
- 【C语言】合并,排序两个链表
- 合并两个递增排序链表
- [C练习]合并两个递增链表
- 输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然按照递增排序
- 合并两个递增的链表
- 合并两个递增的链表
- 合并两个已经按递增排序的文件
- 合并两个递增链表
- 将两个非递减的有序链表合并为一个非递增的有序链表(C语言编程实现)
- 链表合并 求两个递增链表的并
- c语言,用顺序表的原理合并两个集合
- 剑指offer--合并两个递增链表
- 合并两个递增链表为一个递增链表
- 将两个递增的有序链表合并为一个递增的有序链表
- C#面向对象设计模式纵横谈(1)
- String类下compareTo()方法
- PL/SQL学习笔记(3.22)
- TAPI基本函数
- 写java程序最容易犯的21种错误
- 用C语言合并两个按递增排序的链表
- OO世界里的几个基本问题
- 面向对象的设计原则-类设计原则
- 距离的感悟
- asd
- 面向对象的设计原则
- asp.net学习笔记
- 外部多态(External-Polymorphism)
- 傅立叶变换和小波分析