#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. c#中两种不同的存储过程调用与比较

    存储过程简介 简单的说,存储过程是由一些SQL语句和控制语句组成的被封装起来的过程,它驻留在数据库中,可以被客户应用程序调用,也可以从另一个过程或触发器调用.它的参数可以被传递和返回.与应用程序中的函 ...

  2. SQL Server中解决死锁

    SQL Server中解决死锁的新方法介绍 数据库操作的死锁是不可避免的,本文并不打算讨论死锁如何产生,重点在于解决死锁,通过SQL Server 2005, 现在似乎有了一种新的解决办法. 将下面的 ...

  3. Java NIO与IO的区别和比较

    传统的socket IO中,需要为每个连接创建一个线程,当并发的连接数量非常巨大时,线程所占用的栈内存和CPU线程切换的开销将非常巨大.使用NIO,不再需要为每个线程创建单独的线程,可以用一个含有限数 ...

  4. BZOJ2466——[中山市选]树

    1.题目大意:给你一棵树,树的每个节点都有一个权值,是0或1,最开始都是0,你可以做一种修改操作,就是把一个节点和它相邻的 节点的权值取反,问最少几次修改能把所有节点的权值变得都是1,最多100个节点 ...

  5. BZOJ3083——遥远的国度

    1.题目大意:三个操作,换根,修改树上的某条路径,查询一个子树的最小值 2.分析:这个其实还是挺好做的,修改树上的某条路径,裸树剖,查询子树的最小值,这个是树剖满足dfs序 那么就是换根了,对吧,其实 ...

  6. 剑指Offer 找出字符串中第一个只出现一次的字符

    题目描述 找出字符串中第一个只出现一次的字符 如果无此字符 请输出'.' 输入描述: 输入一串字符,由小写字母组成 输出描述: 输出一个字符 输入例子: asdfasdfo 输出例子: o 思路:数组 ...

  7. Android中的四种动画(一)

    TweenAnimation 变换动画(也叫作"补间动画"),有四种(alpha scale translate rote). FrameAnimation(也叫DrawableA ...

  8. 一、 Java的值传递和引用传递

    如果参数类型是原始类型(基本类型),那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟之前所谈的传值是一样的.如果在函数中改变了副本的值不会改变原始的值. 如果参数类型是引用类型,那么 ...

  9. linux shell脚本常用语句

    linux shell 指令 诸如-d, -f, -e之类的判断表达式: 文件比较运算符-e filename  如果 filename存在,则为真  [ -e /var/log/syslog ]-d ...

  10. 2016年11月5日--marquee标签、插入百度地图

    <marquee></marquee>可以实现多种滚动效果,无需js控制. 使用marquee标记不仅可以移动文字,也可以移动图片,表格等. 语法:<marquee> ...