文档章节

将两个递增的有序链表合并为一个递增的有序链表(C语言编程实现)

志强朱
 志强朱
发布于 2016/05/08 17:44
字数 423
阅读 159
收藏 0

将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。表中不允许有重复的数据。

#include<stdio.h>
#include<malloc.h> 
typedef  struct list {  
    int data;  
    struct list * next;  //下一个节点地址   
}list;  
//第一条链表 
struct list * L=NULL;//头
struct list * head=NULL;//首
struct list * p=NULL;  
//第二条链表
struct list * L1=NULL;//头
struct list * head1=NULL;//首
struct list * p1=NULL; 
//代理链表
struct list * L2=NULL;//头
struct list * q=NULL;//L2备用地址 
struct list * q1=NULL;//备用地址 
int main(){
	int i=0,length;
	printf("请输入链表的长度\n");
	scanf("%d",&length); 
	head=(struct list *)malloc(sizeof(struct  list)); 
	L=head;
	printf("请依次输入链表的内容\n");
	for(i;i<length;i++){
		p = (struct list *)malloc(sizeof(struct  list));
        scanf("%d",&p->data);
        p->next=NULL;
        head->next=p;
        head=p;
    }
    int i1=0,length1;
	printf("请输入链表的长度\n");
	scanf("%d",&length1);
	 
	head1=(struct list *)malloc(sizeof(struct  list)); 
	L1=head1;
	printf("请依次输入链表的内容\n");
	for(i1;i1<length1;i1++){
		p1= (struct list *)malloc(sizeof(struct  list));
        scanf("%d",&p1->data);
        p1->next=NULL;
        head1->next=p1;
        head1=p1;
    }
    L2=(struct list *)malloc(sizeof(struct  list));
	q=L2;//备用合并链表起始地址 
	p=L->next;
    p1=L1->next;
	while(p&&p1){	
	  if(p->data<p1->data){
     	L2->next=p;
		L2=p;
		p=p->next;
	}else if(p->data==p1->data){
		L2->next=p;
		L2=p;
		p=p->next;
		q1=p1->next;//备用相同元素的下一个地址指向 
		free(p1);
		p1=q1;
		
	}else if(p->data>p1->data){
		L2->next=p1;
		L2=p1;
		p1=p1->next;
	}		
	}
   L2->next=p?p:p1;
   free(L1);
   printf("合并后链表的内容\n");
    p=q->next;
    while(p){
	printf("%d ",p->data);
	p=p->next;
	}
	
}


© 著作权归作者所有

共有 人打赏支持
志强朱
粉丝 4
博文 209
码字总数 108290
作品 0
郑州
程序员
私信 提问
经典算法学习——合并两个有序链表

类似的,合并两个有序的数组或者链表也是剑指Offer中的经典题型。题目描述如下:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是按照递增排序的。我这里以合并链表来实现。...

chenyufeng1991
2016/08/21
0
0
合并N个有序链表与FQ公平调度

下大雨了,于是就想表达一些只有下雨才能表达的东西。夜半酒酣惊觉起,使我流泪忆江南…前天晚上下班带着小小在暴雨中狂奔,非常舒服,其实也算是流言终结者吧。反驳一下几千年来在我国北方通...

dog250
2018/05/09
0
0
LeetCode 23. Merge k Sorted Lists(合并 k 个有序链表)

原题 Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 题目: 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。...

dby_freedom
2018/09/27
0
0
编程题——11~20

十一、数值的整数次方 实现函数double Power( double base, int exponent ),求base的exponent。不使用哭函数,同时 不需要考虑大数问题。 十二、打印1到最大的n位数 输入数字n,按顺序打印出...

thanatos_y
2016/07/21
0
0
CodingInterview 一刷

1. 找出数组中重复的数字 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一...

BookThief
2018/08/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java单例模式学习记录

在项目开发中经常能遇见的设计模式就是单例模式了,而实现的方式最常见的有两种:饿汉和饱汉(懒汉)。由于日常接触较多而研究的不够深入,导致面试的时候被询问到后有点没底,这里记录一下学习...

JerryLin123
昨天
4
0
VSCODE 无法调试

VSCODE 无法调试 可以运行 可能的原因: GCC 的参数忘了加 -g

shzwork
昨天
5
0
理解去中心化 稳定币 DAI

随着摩根大通推出JPM Coin 稳定币,可以预见稳定币将成为区块链落地的一大助推器。 坦白来讲,对于一个程序员的我来讲(不懂一点专业经济和金融),理解DAI的机制,真的有一点复杂。耐心看完...

Tiny熊
昨天
4
0
5.线程实现

用于线程实现的Python模块 Python线程有时称为轻量级进程,因为线程比进程占用的内存少得多。 线程允许一次执行多个任务。 在Python中,以下两个模块在一个程序中实现线程 - _thread 模块 th...

Eappo_Geng
昨天
7
0
ServiceLoader

创建一个接口文件在resources资源目录下创建META-INF/services文件夹在services文件夹中创建文件,以接口全名命名创建接口实现类 内容me.zzp.ar.d.PostgreSQLDialectme.zzp.ar.d.Hype...

Cobbage
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部