已有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 ...
随机推荐
- Javascript高级程序设计——基本概念(一)
一.语法 EMCA-262通过叫做ECMAScript的“伪语言”为我们描述了javascript实现的基本概念 javascript借鉴了C的语法,区分大小写,标示符以字母.下划线.或美元符号($) ...
- Android 如何在Eclipse中查看Android API源码 及 support包源码
当我们阅读android API开发文档时候,上面的每个类,以及类的各个方法都是已经写好的方法和控件,可是我们只是在搬来使用,不知道它的原理,它是如何被实现的.android系统是开源的,所以谷歌官方 ...
- Java 7 Concurrency Cookbook 翻译 第一章 线程管理之五
九.使用线程本地变量 一个并发程序的最关键特征就是共享数据.这个特性在那些继承了 Thread 类或者 实现了 Runnable 接口的对象上显得更加重要. 如果你创建一个实现了 Runnable 接 ...
- BZOJ1798——[Ahoi2009]Seq维护序列seq
1.题目大意:区间修改乘法操作和加法操作,求区间和 2.分析:为了填补bzoj2631的坑还是写一发题解吧,首先呢,既然想要双标记,但是这两个标记之间又有着制约作用,所以要定义优先级,这个优先级就定义 ...
- junk
var mydate1 = new Date($('.stt').html()); var mydate2 = new Date($('.ett').html()); if (window.Activ ...
- Two Strings Are Anagrams
Write a method anagram(s,t) to decide if two strings are anagrams or not. 判断两个字符串里的字符是否相同,也就是是否能够通过改 ...
- 项目: 推送水木文章到Kindle
代码在github:https://github.com/Viyu/PushNewsmth2Mail 当年买Kindle的时候,想再Kindle上阅读水木的帖子,但Kindle的Web上网体验太差,想 ...
- Github GUI 托管代码教程
附录:克隆仓库到本地:git clone https://github.com/chzeze/WeiboHomeCrawl.git
- python编码问题(2)
先上代码: # -*- coding: utf-8 -*- import sys import urllib2 import re import chardet import sys print sy ...
- ajax调用aspx.cs中的WebMethod
前台: <script language="javascript" src="../js/jquery-1.8.2.js"></script& ...