两个链表的合并

两个单链表合并为一个单链表 #include<stdio.h> #include<stdlib.h> typedef int DataType; typedef struct node { DataType data; struct node * next; }ListNode; typedef ListNode * LinkList; LinkList jianbiao(int n) ... 阅读详情
#include <stdio.h>
#include <malloc.h>
#define LEN sizeof(struct student)
struct  student
{long num;
 int score;
 struct student *next;
};

struct student lista,listb;
int n,sum=0;

int main()
{struct student *creat(void);
 struct student *insert(struct student  *,struct student *);
 void print(struct student *);
 struct student *ahead,*bhead,*abh;
 printf("input list a:\n");
 ahead=creat();
 sum=sum+n;
 printf("input list b:\n");
 bhead=creat();
 sum=sum+n;
 abh=insert(ahead,bhead);
 print(abh);
 return 0;
}

struct student *creat(void)       //建立链表函数
 {struct student *p1,*p2,*head;
  n=0;
  p1=p2=(struct student *)malloc(LEN);
  printf("input number & scores of student:\n");
  printf("if number is 0,stop inputing.\n");
  scanf("%ld,%d",&p1->num,&p1->score);
  head=NULL;
  while(p1->num !=0)
    {n=n+1;
     if (n==1)
       head=p1;
     else
       p2->next=p1;
     p2=p1;
     p1=(struct student *)malloc(LEN);
     scanf("%ld,%d",&p1->num,&p1->score);
    }
    p2->next=NULL;
  return(head);
}

/*struct student *creat(void)
 {
 	struct student*p1,*p2,*head;
 	n=0;
 	p1=p2=(struct student*)malloc(LEN);
 	scanf("%ld,%d",&p1->num,&p1->score);
 	while(p1->num!=0)

 	 {
	 	n=n+1;
	 	if(n==1)
	 	head=p1;
	 	else
	 	p2->next=p1;
	 	p2=p1;
 	    p1=(struct student*)malloc (LEN);
        scanf("%ld %d",&p1->num,&p1->score);
 	 }
	 p2->next=NULL;	
	 	
	 return (head);
 }
 */   
/*struct student *insert(struct student *ah,struct student *bh)   //插入函数
 {struct student * pa1,* pa2,* pb1,* pb2;
  pa2=pa1=ah;
  pb2=pb1=bh;
  do
  {while((pb1->num>pa1->num) && (pa1->next !=NULL))
           {pa2=pa1;
             pa1=pa1->next;
           }
         if (pb1->num <= pa1->num)
            {if (ah==pa1)
	             ah=pb1;
         else 
		     pa2->next=pb1;
	         pb1=pb1->next;
             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(ah);
 }
*/
/*struct student *creat(void)
 {
 	struct student*p1,*p2,*head;
 	int n=0;
 	p1=p2=(struct student*)malloc(LEN);
 	scanf("%d,%f",&p1->num,&p1->score);
 	while(p1->num!=0)

 	 {
	 	n=n+1;
	 	if(n==1)
	 	head=p1;
	 	else
	 	p2->next=p1;
	 	p2=p1;
 	    p1=(struct student*)malloc (LEN);
        scanf("%d %f",&p1->num,&p1->score);//给成员赋值时注意要带赋值号 
 	 }
	 p2->next=NULL;	
     return (head);
 }
 
 */
 struct student *insert(struct student *ah,struct student *bh) 
 {
 	struct student *pa1,*pa2,*pb1,*pb2;
 	pa2=pa1=ah;
    pb2=pb1=bh; 
 	do
 	{
	 	while((pb1->num>pa1->num)&&(pa1->next!=NULL))
	 	{
	 		pa2=pa1;
	 		pa1=pa1->next; 
	 	}
	 	if(pb1->num<=pa1->num)
	 	   {//if(pa1=ah)
	        if(ah==pa1)//等号啊,你是让我怎么办才能不把==写成= 
	 	    	ah=pb1;
 	        else
 	        	pa2->next=pb1;
 	        	pb1=pb1->next;
 	        	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(ah);
 }
 
void print(struct student *head)  //输出函数
  {struct student  *p;
   printf("There are %d records:  \n",sum);
   p=head;
   if (p !=NULL)
     do
       {printf("%ld %d\n",p->num,p->score);
	    p=p->next;
       }while (p !=NULL);
   }

/*
1001 ,60 
1090 ,68
1050 ,58
0
1058 ,96
1040 ,52
0
*/

【 039】 合并两个链表 1.实现将两个带头结点的链表L1和L2进行连接,连接后的链表仍然使用原来的存储空间;结果为链表L2连接到L1的末尾。思路:找到链表L1的尾节点,使其指针域指向下一个链表的头结点(同时将链表L2所占用的内存空间进行回收)。合并之前: 合并之后: #include&lt;stdlib.h&gt; #include &lt;stdio.h&gt; typedef int ElemType; typedef struct li 阅读详情

相关推荐

链表归并的操作,将两个链表合并成一个链表

用于数据结构中链表的归并操作,可以将连个链表的数据类型的数据合并成一个链表

单链表实现

单链表

m0_65022800的博客 205

实现两个链表的合并(数据结构课程设计c语言版)

实现两个链表的合并(数据结构课程设计c语言版)

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

#include #include #define NULL 0 #define LEN sizeof(struct student) struct student { long num; float score; struct student *next; }; int n,sum=0; struct student lista,listb; struct student *creat(v

w3071206219的博客 9031

合并两个单链表,不使用新的空间

合并单链表的方法很多,这里给出一种不使用新的空间直接在原空间上合并的例子

实现两个链表的合并

基本功能要求: (1)建立两个链表A和B 链表元素个数分别为m和n个 (2)假设元素分别为 x1 x2 …xm 和 y1 y2 …yn 把它们合并成一个线性表C 使得: 当m> n时 C x1 y1 x2 y2 …xn yn … xm 当n>m时 C y1 x1 y2 x2 …ym xm … yn 输出线性表C: (1) 用直接插入排序法对C进行升序排序 生成链表D 并输出链表D ">基本功能要求: (1)建立两个链表A和B 链表元素个数分别为m和n个 (2)假设元素分别为 x1 x2 …xm 和 y1 y2 …yn 把它们合并成一个线性表C 使得: 当m> n时 C x1 y1 x2 y2 …xn yn … xm 当n>m时 C y1 x1 y2 x2 …ym xm … yn [更多]

【数据结构】--oj_合并两个有序链表(详解)

链表力扣面试题系列,包含c,c++和java代码

m0_74044018的博客 5936

实现两个链表的合并(C语言)

给定两个链表AB,根据AB链表元素数目的不同,使用交叉排列得到链表C,之后对链表C进行升序排列得到链表D

合并两个有序链表

1.将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4] 示例 2: 输入:l1 = [], l2 = [] 输出:[] 示例 3: 输入:l1 = [], l2 = [0] 输出:[0] 解题思路:1.用尾插的方法来合并链表,没有新建节点,是拼接节点。 2.先是判断特殊情况,若l1和l2中其中一个为空,直接链接对方链表:例如l1为空,则链接l

a1085653724的博客 7298

热测试芯片(TTC)在ASIC热设计中的关键作用与应用

热测试芯片(TTC)是半导体热管理领域的重要工具,通过物理仿真技术精确测量芯片温度分布。其核心原理是利用金属膜电阻和二极管传感器阵列,实现微米级空间分辨率和毫秒级动态响应。在工程实践中,TTC能有效预防热岛效应、优化散热设计,特别适用于AI加速芯片、3D堆叠封装等先进半导体器件。相比传统热仿真软件,TTC提供更真实的温度数据,帮助工程师在流片前发现潜在热问题。随着1mm微型单元技术的突破,TTC已能检测0.3mm²微小区域的热变化,满足GaN/SiC等宽禁带半导体器件的测试需求。

weixin_33688840的博客 507

SAP传输请求全流程详解:从SE10创建到STMS跨环境部署(附常见错误排查)

本文详细解析了SAP传输请求的全流程,从SE10创建到STMS跨环境部署,并提供了常见错误排查方法。涵盖工作台请求、定制请求等类型,以及STMS传输原理和实战操作技巧,帮助用户高效管理SAP系统变更。

weixin_29214335的博客 143

两个链表合并成有序链表的三种方法 C++实现

通过链表合并,求得两组数据的交集,快速实现数据统计。

2301_80143810的博客 2562

SIwave学习记录:电热耦合仿真

SIwave电热耦合仿真

m0_68174736的博客 2335

合并两个链表

合并两个链表 题目描述: 思路一:迭代 我们可以用迭代的方法来实现上述算法。当 l1 和 l2 都不是空链表时,判断 l1 和 l2 哪一个链表的头节点的值更小,将较小值的节点添加到结果里,当一个节点被添加到结果里之后,将对应链表中的节点向后移一位 首先,我们设定一个哨兵节点 prehead ,这可以在最后让我们比较容易地返回合并后的链表。我们维护一个 prev 指针,我们需要做的是调整它的 next 指针。然后,我们重复以下过程,直到 l1 或者 l2 指向了 null :如果 l1 当前节点的值小于

weixin_43831728的博客 3877

从零实现反激式电源仿真:LTspice高级应用实例

深入解析反激式开关电源的建模与仿真过程,利用LTspice实现从零搭建电路,精准验证电路仿真效果,提升电源设计效率与可靠性。

weixin_36149538的博客 1896

石油化工软件:ProII二次开发_(9).案例研究:ProII二次开发实例

我们将上述三个步骤整合到一个完整的案例中,展示如何从头到尾实现一个ProII二次开发项目。这个项目包括自动化流程模拟、数据处理与分析以及动态工艺参数调整。

kkchenjj的博客 918

合并两个排序的链表

输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。

2301_78838184的博客 896

ADS基础教程24 - Gerber文件的导入

一、引言二、基本概念1.仿真文件下载2.仿真文件介绍二、导入步骤1.新建workspace2.选择Layout结构3.导入设计4.选择文件类型5.导入文件6.预览文件内容7.铜皮离散问题四、总结选择。通过本文章结束,可以了解ADS中如何将导入Gerber文件,并且对导入的铜皮进行合并。下一步就针对导入的文件进行层叠设置和编辑。END!}}END!

XZ_ZC的博客 3049

两个有序链表序列的合并

两个有序链表序列的合并 本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。 函数接口定义: List Merge( List L1, List L2 ); 其中List结构定义如下: typedef struct Node PtrToNode; struct Node { ElementType Data; / 存储结点数据 / PtrToNode Next; / 指向下一个结点的指针 / }; typedef PtrToNode List; / 定义单链表类型 */ L1和

photoresist的博客 1877

AI驱动的客户终身价值分析:深入理解公司的收入质量

客户终身价值(Customer Lifetime Value, CLV)是衡量客户在整个生命周期内能为企业带来多少利润的重要指标。传统的CLV计算方法往往过于简化,无法准确反映复杂的客户行为和收入模式。本文旨在介绍如何利用人工智能技术,特别是机器学习方法,构建更精确的CLV预测模型,从而帮助企业深入理解其收入质量。CLV的基本概念和商业意义传统CLV计算方法的局限性基于机器学习的CLV预测方法特征工程和模型选择策略实际应用案例和Python实现首先介绍CLV的基本概念和商业背景。

AI云原生与云计算技术学院 477

准备生日礼物

摘要: 题目要求统计某月份需要准备的员工生日礼物数量。输入包括目标月份、员工姓名列表和对应的生日列表(格式为Year/Month/Day)。需处理重复员工(以最后一次录入为准),统计该月生日的员工人数。示例1中5月有3名员工生日,输出3;示例2中10月有6名,输出6。解题关键在于使用哈希表去重(以员工姓名为键),拆分生日字符串提取月份进行匹配。代码实现(C++/Java/Python)均遵循以下步骤:读取输入、哈希去重、解析月份并统计目标月份人数。时间复杂度为O(n),空间复杂度O(n)。

面试高手的博客 297

合并两个有序链表(java)

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。然后再借助一个辅助链表进行大小串联起来,最后返回这个辅助链表就可以了。代码很简单,直接看代码吧。两个链表是有序的,那我们用两个指针分别卡住两个链表,进行大小比较,输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]

SP_1024的博客 3160

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

上一篇: 格式输出
下一篇: 编写一个电话簿,可以实现增删查找的功能
Hello______world
博客等级 码龄14年 16粉丝 106原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值