链表归并
2016-07-26 19:09
246 查看
题目描述
分别输入两个有序的整数序列(分别包含M和N个数据),建立两个有序的单链表,将这两个有序单链表合并成为一个大的有序单链表,并依次输出合并后的单链表数据。输入
第一行输入M与N的值;第二行依次输入M个有序的整数;
第三行依次输入N个有序的整数。
输出
输出合并后的单链表所包含的M+N个有序的整数。#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
struct node*next;
};
int main()
{
int m,n,i;
struct node*head1,*p,*head2,*q,*tail;
scanf("%d %d",&m,&n);
head1 = (struct node*)malloc(sizeof(struct node));
head1->next = NULL;
tail=head1;
for(i=0; i<=m-1; i++)
{
p = (struct node*)malloc(sizeof(struct node));
scanf("%d",&p->data);
p->next=NULL;
tail->next=p;
tail=p;
}
head2 = (struct node*)malloc(sizeof(struct node));
head2->next = NULL;
tail=head2;
for(i=0;i<=n-1;i++)
{
p = (struct node*)malloc(sizeof(struct node));
scanf("%d",&p->data);
p->next=NULL;
tail->next=p;
tail=p;
}
p=head1->next;
q=head2->next;
tail=head1;
free(head2);
while(p&&q)
{
if(q->data<=p->data)
{
tail->next=q;
tail=q;
q=q->next;
}
else
{
tail->next=p;
tail=p;
p=p->next;
}
}
if(p!=NULL)
{
tail->next=p;
}
else
tail->next=q;
p=head1->next;
while(p!=NULL)
{
if(p->next!=NULL)
printf("%d ",p->data);
else printf("%d",p->data);
p=p->next;
}
return 0;
}
把head1和head2都分出来利用游动指针tail往head1后面加节点
相关文章推荐
- 20160726
- 高并发数据结构Disruptor解析(2)
- 链表拆分
- 整理:CString类的完美总结&&CString 成员函数用法大全&&string 与 CString 转化&&<string><string.h> 和<cstring>的区别
- WebService基础学习(一)—基础知识
- 把docker当做绿色打包工具
- 二值化图像的颜色翻转
- 离散什么的
- C++ builder消息的运用
- 单链表中重复元素的删除
- 关于数组,函数的一个简单例子(打渔晒网)
- 达内学习笔记——const 指针
- 我对PID的理解
- react研究(一)
- CSR1010蓝牙开发I/O操作
- POJ 2752 既是前缀又是后缀
- 顺序表应用1:多余元素删除之移位算法
- 【字符串1】-替换空格
- 排序算法(OC实现)
- linux第二天总结