已有a,b两个链表,每个链表中的结点包括学号,成绩。要求把两个链表合并。按学号升序排列.
#include <stdio.h>
#define SIZE sizeof(struct student)
struct student
{
long num;
float score;
struct student *next;
};
struct student * create();
struct student * input();
void print(struct student *);
struct student * union_linktable(struct student *,struct student *);
struct student * insert(struct student *,struct student *);
int main(int argc,char *argv[])
{
struct student *head1,*head2;
printf("please input linktable1:\n");
head1 = (struct student *)create();
printf("the lintable1 data is \n");
print(head1);
printf("please input linktable2:\n");
head2 = (struct student *)create();
printf("the lintable2 data is \n");
print(head2);
printf("union linktable1 and linktable2:\n");
head1 = union_linktable(head1,head2);
print(head1);
system("pause");
return 0;
}
struct student * create()
{
int n = 0;
struct student *head;
struct student *p1,*p2;
head = NULL;
do
{
p1 = input();
if (0 == p1->num)
{
break;
}
else
{
if (0 == n)
{
head = p1;
}
else
{
p2->next = p1;
}
p2 = p1;
n++;
}
}while(1);
p2->next = NULL;
return head;
}
struct student * input()
{
struct student *p;
p = (struct student *)malloc(SIZE);
printf("please input num,score:");
scanf("%ld,%f",&p->num,&p->score);
return p;
}
void print(struct student *head)
{
struct student *p;
p = head;
if (head != NULL)
{
do
{
printf("num:%ld,score:%5.1f\n",p->num,p->score);
p = p->next;
}while(p != NULL);
}
else
{
printf("error:linktable data is NULL.\n");
}
}
struct student * union_linktable(struct student *head1,struct student *head2)
{
struct student *pa1,*pa2,*pb1,*pb2;
pa1 = pa2 = head1;
pb1 = pb2 = head2;
do
{
while ((pb1->num > pa1->num) && (pa1->next) != NULL)
{
pa2 = pa1;
pa1 = pa1->next;
}
if (pb1->num <= pa1->num)
{
if(head1 == pa1)
{
head1 = pb1;
}
else
{
pa2->next = pb1;
}
pb2->next = pa1;
pa2 = pb2;
pb2 = pb1;
}
}while((pa1->next != NULL) || (pa1 == NULL && pb1 != NULL));
if ((pb1 != NULL) && (pb1->num > pa1->num) &&(pa1->next == NULL))
{
pa1->next = pb1;
}
return head1;
}
struct student *insert(struct student *head,struct student *stu)
{
struct student *p0,*p1,*p2;
p1 = head;
p0 = stu;
if(NULL == head)
{
head = p0;
p0->next = NULL;
}
else
{
while (p0->num > p1->num && p1->next != NULL)
{
p2 = p1;
p1 = p1->next;
}
if (p0->num <= p1->num)
{
if (p1 == head)
{
head = p0;
}
else
{
p2->next = p0;
}
p0->next = p1;
}
else
{
p1->next = p0;
p0->next = NULL;
}
}
return head;
}
已有a,b两个链表,每个链表中的结点包括学号,成绩。要求把两个链表合并。按学号升序排列.的更多相关文章
- 已有a,b两个链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,按学号升序排列
1.我的思路先将b链表连接在a链表的后面,这个很容易实现,将a链表最后的结点中的p.next改为指向b链表的头结点即可. 再将这个新链表用选择排序即可. 代码如下: #include<stdio ...
- [PHP] 算法-请找出带环链表的环的入口结点的PHP实现
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null 1.找链表倒数第k个结点,输入一个链表,输出该链表中倒数第k个结点.第一个指针走(k-1)步,到达第k个节点,两个指针同时往后 ...
- 35.两链表的第一个公共结点[Find the first common node of two linked list]
[题目] 两个单向链表,找出它们的第一个公共结点. 链表的结点定义为: C++ Code 123456 struct ListNode { int m_nKey; ...
- 九度OJ 1505 两个链表的第一个公共结点 【数据结构】
题目地址:http://ac.jobdu.com/problem.php?pid=1505 题目描述: 输入两个链表,找出它们的第一个公共结点. 输入: 输入可能包含多个测试样例. 对于每个测试案例, ...
- 【剑指offer】面试题37:两个链表的第一个公共结点
题目: 输入两个链表,找出它们的第一个公共结点. 思路: 由链表的定义知是单链表.对于单链表,如果两个链表有公共结点,则两个链表必然是像Y型相交.则先计算出各个链表的长度,让长链表的头指针先走多出来的 ...
- C++版 - 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告
剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?t ...
- [PHP] 算法-找出两个链表的第一个公共结点的PHP实现
输入两个链表,找出它们的第一个公共结点 1.两个单链表,有公共结点,那么必然,尾部公用 2.找出链表1的长度,找出链表2的长度,长的链表减去短的链表得出一个n值 3.长的链表先走n步,两个链表再同时移 ...
- 【Java】 剑指offer(52) 两个链表的第一个公共结点
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入两个链表,找出它们的第一个公共结点. 思路 蛮力法:遍历第一个 ...
- 《剑指offer》第五十二题(两个链表的第一个公共结点)
// 面试题52:两个链表的第一个公共结点 // 题目:输入两个链表,找出它们的第一个公共结点. #include <iostream> #include "List.h&quo ...
随机推荐
- TreeSet入门详解
看到TreeSet先从最基础的去了解他,他是一个类,他所在的位置是java.util包中. 我们可以看一看他的继承架构图: 该类实现的接口: 1TreeSet案例: TreeSet是一个有序集合,Tr ...
- Cache and Virtual Memory
Cache存储器:电脑中为高速缓冲存储器,是位于CPU和主存储器DRAM(DynamicRandonAccessMemory)之间,规模较小,但速度很高的存储器,通常由SRAM(StaticRando ...
- java之google style
Google的Java编码规范英文版: http://google-styleguide.googlecode.com/svn/trunk/javaguide.html Google的Java编码规范 ...
- APPCAN IDE中安装emmet插件
1.首先打开APPCAN IDE 2.帮助(help)-安装新软件(install New sofaWare) 3.打开Install窗口,点击 Add,在Add Repository窗口中,Name ...
- C#获取文件/字节数组MD5值方法
找了很多,就这个管用,有时间好好研究一番 public static string GetMD5Hash(string fileName) { try { FileStream file = new ...
- Code First02---CodeFirst配置实体与数据库映射的两种方式
Code First有两种配置数据库映射的方式,一种是使用数据属性DataAnnotation,另一种是Fluent API. 这两种方式分别是什么呢?下面进行一一解释: DataAnnotation ...
- iOS开发——UI进阶篇(十一)应用沙盒,归档,解档,偏好设置,plist存储,NSData,自定义对象归档解档
1.iOS应用数据存储的常用方式XML属性列表(plist)归档Preference(偏好设置)NSKeyedArchiver归档(NSCoding)SQLite3 Core Data 2.应用沙盒每 ...
- trigger() & bind() 使用心得
trigger(type) 在每一个匹配的元素上触发某类事件. 返回值:jQuery 参数: type (String): 要触发的事件类型 示例: $("p").trigger( ...
- Laravel 5.1 文档攻略 —— Eloquent Collection
简介 像all()和get(),还有一些处理模型关系这种会返回多条数据的方法,在Eloquent里面会返回一个collection对象集合(对象装在对象里),而不是像DQB的数组结果集合(对象装在数组 ...
- Sqli-LABS通关笔录-12
通过这个关卡我学习到了: 1.双引号千万别忘记,就是因为忘了弄了好一会儿.一直不报错. 2. 00x1万能密码构造二 报错的内容为: You have an error in your SQL syn ...