已有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 ...
随机推荐
- C#获取文件/字节数组MD5值方法
找了很多,就这个管用,有时间好好研究一番 public static string GetMD5Hash(string fileName) { try { FileStream file = new ...
- Javascript高级程序设计——基本概念(二)
相等操作符: 相等==:这个操作符会先转换操作数,强制类型转换,然后再比较他们的相等性. null == undefined //true NaN == NaN //false"5" ...
- windows下调用外部exe程序 SHELLEXECUTEINFO
本文主要介绍两种在windows下调用外部exe程序的方法: 1.使用SHELLEXECUTEINFO 和 ShellExecuteEx SHELLEXECUTEINFO 结构体的定义如下: type ...
- int (*p)[4] 与 int* p[4]
碰到一道题: ][] = {,,,,,,,,,,,}; ]; ] = (a+); cout<<*(p+)<<endl; cout<<(*ptr+)[]<< ...
- WordPress文章浏览历史插件
选自:http://www.ludou.org/wordpress-recently-viewed.html 最近有很多网友问我,露兜博客右边栏底部的 您刚刚看过 栏目是怎么实现.其实我也是参考的这篇 ...
- MRC
MRC 关于NSString,retainCount为-1 C方法中含有Copy的方法名, 都要释放 例如CFRealse(ref) 字符串常量,因为one为字符串常量,系统不会回收,也不会对其作引用 ...
- Sqli-LABS通关笔录-15
这关是延时的了. Payload: -admin' or sleep(10)# 需要注意的是,--+不行反而#才可以.具体缘由可见<sql注入之你问我答>第20问:http://www.c ...
- storyboard有多个Segue的传递
在项目中需要在一个页面向多个页面传不同的值. 在view2Controller和view3Controller中分别有相应的Str2和Str3 - (void)prepareForSegue:(UIS ...
- MyEclipse 10 集成Maven
第一步:安装Maven,作者安装目录是:D:\Java\apache-maven-3.2.5 第二步:配置本地仓库 maven将每次应用过的项目.文件.jar都会存储到maven的仓库中(默认仓库位置 ...
- linux系统性能调优第一步——性能分析(vmstat)
linux系统性能调优第一步--性能分析(vmstat) 分类: LINUX 性能调优的第一步是性能分析,下面从性能分析着手进行一些介绍,尤其对linux性能分析工具vmstat的用法和实践进行详细介 ...