#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两个链表,每个链表中的结点包括学号,成绩。要求把两个链表合并。按学号升序排列.的更多相关文章

  1. 已有a,b两个链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,按学号升序排列

    1.我的思路先将b链表连接在a链表的后面,这个很容易实现,将a链表最后的结点中的p.next改为指向b链表的头结点即可. 再将这个新链表用选择排序即可. 代码如下: #include<stdio ...

  2. [PHP] 算法-请找出带环链表的环的入口结点的PHP实现

    给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null 1.找链表倒数第k个结点,输入一个链表,输出该链表中倒数第k个结点.第一个指针走(k-1)步,到达第k个节点,两个指针同时往后 ...

  3. 35.两链表的第一个公共结点[Find the first common node of two linked list]

    [题目] 两个单向链表,找出它们的第一个公共结点. 链表的结点定义为:  C++ Code  123456   struct ListNode {     int         m_nKey;    ...

  4. 九度OJ 1505 两个链表的第一个公共结点 【数据结构】

    题目地址:http://ac.jobdu.com/problem.php?pid=1505 题目描述: 输入两个链表,找出它们的第一个公共结点. 输入: 输入可能包含多个测试样例. 对于每个测试案例, ...

  5. 【剑指offer】面试题37:两个链表的第一个公共结点

    题目: 输入两个链表,找出它们的第一个公共结点. 思路: 由链表的定义知是单链表.对于单链表,如果两个链表有公共结点,则两个链表必然是像Y型相交.则先计算出各个链表的长度,让长链表的头指针先走多出来的 ...

  6. C++版 - 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告

    剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?t ...

  7. [PHP] 算法-找出两个链表的第一个公共结点的PHP实现

    输入两个链表,找出它们的第一个公共结点 1.两个单链表,有公共结点,那么必然,尾部公用 2.找出链表1的长度,找出链表2的长度,长的链表减去短的链表得出一个n值 3.长的链表先走n步,两个链表再同时移 ...

  8. 【Java】 剑指offer(52) 两个链表的第一个公共结点

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入两个链表,找出它们的第一个公共结点. 思路 蛮力法:遍历第一个 ...

  9. 《剑指offer》第五十二题(两个链表的第一个公共结点)

    // 面试题52:两个链表的第一个公共结点 // 题目:输入两个链表,找出它们的第一个公共结点. #include <iostream> #include "List.h&quo ...

随机推荐

  1. 【python网络编程】使用rsa加密算法模块模拟登录新浪微博

    一.基础知识 http://blog.csdn.net/pi9nc/article/details/9734437 二.模拟登录 因为上学期参加了一个大数据比赛,需要抓取数据,所以就想着写个爬虫抓取新 ...

  2. Nginx的作用

    负载均衡 现在几乎看不到单机奋斗的应用了吧.反向代理服务器可以根据负载均衡算法进行均匀或者自定义的转发.常见的负载均衡算法有:轮转算法(Round Robin).最少连接算法(Least Connec ...

  3. HDU 1064 Financial Management

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1064 解题报告:用来凑个题数吧,看题的时间比过题的时间多的多,就是输入12个浮点数,然后输出平均数,只 ...

  4. iOS开发——高级篇——iOS键盘的相关设置(UITextfield)

    一.键盘风格 UIKit框架支持8种风格键盘. typedef enum { UIKeyboardTypeDefault, // 默认键盘:支持所有字符 UIKeyboardTypeASCIICapa ...

  5. WWDC15 Session笔记 - Xcode 7 UI 测试初窥

    https://onevcat.com/2015/09/ui-testing/ WWDC15 Session笔记 - Xcode 7 UI 测试初窥 Unit Test 在 iOS 开发中已经有足够多 ...

  6. tableview侧滑删除

    - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { ) { retu ...

  7. php预定义常量$_SERVER

    1.需求 了解预定义常量$_SERVER 2.属性 $_SERVER['REQUEST_URI'] //URI 用来指定要访问的页面.例如 "/index.html" $_SERV ...

  8. Oracle Redo

    Redo log 重做日志在Oracle数据库中,有一种日志文件叫做重做日志文件,他就是大家俗称的:redolog.在redolog中又分为两种:在线重做日志与归档日志. ONLINE Redo lo ...

  9. linux下使用ffmpeg将amr转成mp3

    说明:AMR格式是智能手机上的常用音频文件格式,比MP3格式的压缩比大.同样时长的AMR文件大概是MP3的十分之一,所以在移动互联项目中应用比较广泛.但目前AMR格式在个人电脑上应用较少,所以目前大部 ...

  10. BZOJ 3365: [Usaco2004 Feb]Distance Statistics 路程统计

    Description 一棵树,统计距离不大于 \(k\) 的点对个数. Sol 点分治. 发现自己快把点分治忘干净了... 找重心使所有儿子的最大值尽量小,然后每次处理全部子树,再减去每个子树的贡献 ...