两个单向循环链表的合并(带头结点)_合并单向循环链表la和lb。-程序员宅基地

技术标签: 算法  单链表  链表  数据结构与算法  指针  数据结构  

两个单向循环链表的合并(带头结点)

问题引入:

已知两个带头结点的单向循环链表,LA和LB分别是链表的头指针,LA=(a1,a2…am),LB=(b1,b2,…bm),编写算法,将LA和LB合并成一个单项循环链表LC=(a1,a2…am,b1,b2,…bm)。

核心算法:

只需要修改两个表的表尾结点让两个表连起来即可。最后释放多余的LB这个头结点

typedef struct node {
	DataType data;
	struct node *next;
}*LSNode;
//两个带头结点的单向循环链表合并
LSNode merge(LSNode LA, LSNode LB) {
	LSNode pa = LA,LC=LA;
	LSNode pb = LB;
	while (pa->next != LA) {//让p指向LA表尾
		pa=pa->next;
	}
	while (pb->next != LB) {//让p指向LB表尾
		pb = pb->next;
	}
	pa->next = LB->next;
	pb->next = LC;
	free(LB);
	return LC;

}

完整测试(VS2017)

List.h

#pragma once
typedef struct node {
	DataType data;
	struct node *next;
}*LSNode;
//初始化
void Initiate(LSNode *head) {
	(*head) = (LSNode)malloc(sizeof(struct node));
	(*head)->next = (*head);
}
//插入函数
bool Insert(LSNode head,int i, DataType data) {
	int j = -1;
	LSNode p = head,q;
	while (p->next != head && j < i - 1)//最终p指向第j-1个结点
	{
		p = p->next;
		j++;
	}
	if (j != i - 1)
	{
		printf("插入位置出错!");
		return false;
	}
	q = (LSNode)malloc(sizeof(struct node));
	q->data = data;
	q->next = p->next;
	p->next = q;
	return 1;
}
//遍历链表
void print(LSNode head)
{
	LSNode p = head;
	while (p->next != head) {
		p = p->next;
		printf("%d ", p->data);
	}
	printf("\n");
}
//两个带头结点的循环单链表合并
LSNode merge(LSNode LA, LSNode LB) {
	LSNode pa = LA,LC=LA;
	LSNode pb = LB;
	while (pa->next != LA) {//让p指向LA表尾
		pa=pa->next;
	}
	while (pb->next != LB) {//让p指向LB表尾
		pb = pb->next;
	}
	pa->next = LB->next;
	pb->next = LC;
	free(LB);
	return LC;

}

源.cpp

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef int DataType;
#include"List.h"
int main() {
	LSNode head,head1,head2;
	Initiate(&head);
	Initiate(&head1);
	Initiate(&head2);
	for (int i = 0; i < 10; i++) {
		Insert(head, i, i + 1);
		Insert(head1, i, i + 11);
	}
	print(head);
	print(head1);
	//执行两个单项循环链表的合并
	printf("执行两个带头结点单项循环链表的合并:\n");
	head2 = merge(head, head1);
	print(head2);
	return 0;
}

测试结果:

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43753724/article/details/107769051

智能推荐

查看变量类型的python内置函数名是_Python-day05-20200722-函数查看-变量类型和不可变类型参数传递-递归函数-匿名函数-排序映射筛选器-内置函数摘要-一个函数作为另一个函数的返...-程序员宅基地

文章浏览阅读316次。P115# 函数的回顾总结# 1.函数的声明 def# 2.函数的格式 def 函数名(形式参数1,形式参数2....)# 3.函数的调用 函数名(实参1,实参2.....)# 4.函数返回值 使用return 语句返回函数的执行结果# 5.函数返回多个结果 将多个数据打包成一个整体返回# 可以使用字典和列表 通常用元组# 函数名字也是一个标识符# 由字母 数字 下划线 组成 不能以数字开头 ..._查看变量类型的python内置函数为

工作压力大,如何自我调节?_压力大怎么自我调节-程序员宅基地

文章浏览阅读4.4k次。工作压力对我们有很大的不良影响。我们能否消除现代工作生活所带来的压力?不——因为这不是一件绝对的坏事,所以我们不能消除。在生活中我们需要一定的压力。压力可以刺激我们采取一些行动,挑战我们自身的能力,帮助我们达到自己认为不可能达到的目标。问题就在于我们怎么处理、安排和缓解工作中的压力而不至于因为压力过大而垮掉。   缓解压力的四原则   1.用积极的态度面对压力。    _压力大怎么自我调节

Flowable工作流之Flowable UI画工作流程图-程序员宅基地

文章浏览阅读1.2w次,点赞6次,收藏65次。Flowable是一个用Java编写的轻量级业务流程引擎。Flowable流程引擎允许您部署BPMN 2.0流程定义(用于定义流程的行业XML标准)、创建这些流程定义的流程实例、运行查询、访问活动或历史流程实例和相关数据Flowable在将其添加到应用程序、服务、体系结构时非常灵活。您可以将引擎嵌入到您的应用程序或服务中,方法是包含Flowable库,该库作为JAR提供。因为它是一个JAR,所以可以很容易地将它添加到任何Javajavase;servlet容器,如Tomcat或javaee服务器,如。_flowable ui

scrapy 出现 [twisted.internet.error.TimeoutError:] 的几种解决方案_scrapy twisted报错-程序员宅基地

文章浏览阅读1.6k次。在使用 scapy 进行大批量爬取的时候,少数请求链接会出现请求超时,当出现请求超时时,爬虫会自动重试三次。扩展,可以 通过 设置 RETRY_ENABLED = False 来关闭重试机制若超过 180s 且三次后且还是没有得到数据,就会出现 twisted.internet.error.TimeoutError 错误。提供几种解决办法:1、降低同时请求的数量CONCURRENT_REQUESTS = 52、 增加超时时间DOWNLOAD_TIMEOUT = 20003、 增加重试次_scrapy twisted报错

bash 运行文件#!bin/bash_#!/bin/bash-程序员宅基地

文章浏览阅读1.7w次,点赞7次,收藏60次。【参考文献】【1】A5互联【2】Shell基本用法1 如何使用Chmod使Bash脚本可执行引用自参考文献【1】在本教程中,我将逐步介绍创建bash脚本并使用chmod命令使脚本可执行的步骤。之后,无需使用sh或bash命令就可以运行它。步骤1: 创建一个Bash文件首先是.sh使用以下命令创建带有扩展名的新文本文件。$ touch hello_script.sh步骤2: 编写示例脚本使用任何喜欢的编辑器打开新创建的文件,将以下bash脚本添加到文件中。$ vim hello_scr_#!/bin/bash

oracle12c 修改scn值6,Oracle 12c SCN推进方法汇总(一)之GDB-程序员宅基地

文章浏览阅读223次。在数据库异常恢复中,经常需要修改数据库的 SCN 值,在 12C 之前,我们常用的方法有如下几个:1. oradebug poke 直接修改内存中的值;2. event 10015 来增加 scn 的值;3. _minimum_giga_scn 来增加 scn 的值;4. gdb/dbx 来直接修改内存中的值;5. 修改控制文件来修改 scn 的值;6. 修改数据文件头来修改 scn 的值;7. ..._orace12c scn

随便推点

运维工程师必备技能_运维工程师 技能专长 csdn-程序员宅基地

文章浏览阅读2k次。通用技能 公司与个人 公司是盈利性组织个人和公司必须双赢在认同公司理念且能够给公司创造足够价值的基础上,为个人发展而工作WHO AM I 黑客是守正出奇且具备创造力的群体 守正出奇 这条正道/底线得坚守但如果太过正就迂腐了,为了搞定任务有时得出奇招创造力 一个没有创造力的人是多么的可怜,对于团队来说也是一种耻辱本技能表的本质目的只有一个:引导你拥有足够的创造力黑客也可以是一..._运维工程师 技能专长 csdn

c盘越来越大怎么清理?C:\Windows\System32\DriverStore\FileRepository-程序员宅基地

文章浏览阅读5.7k次。c盘越来越大怎么清理?清理C:\Windows\System32\DriverStore\FileRepository c盘越来越大怎么清理?装系统时划了50G给C盘,随着使用C..._c:\windows\system32\driverstore

[C# WPF] DataGrid选中行或选中单元格的背景和字体颜色修改_wpf datagrid 选中行-程序员宅基地

文章浏览阅读1.4k次。WPF中DataGrid的选中行或选中者单元格,在焦点失去后,颜色会很淡,很不明显,不容易区分。本文介绍在失去焦点的情况下,如何设置行或单元格与选中的时候颜色一样?_wpf datagrid 选中行

基础乐理知识(教你认五线谱)_五线普二三四度是什么意思-程序员宅基地

文章浏览阅读1.2w次,点赞15次,收藏95次。基本乐理_五线普二三四度是什么意思

npm学习:安装、更新以及管理npm版本_to address issues that do not require attention, r-程序员宅基地

文章浏览阅读2w次,点赞12次,收藏109次。._to address issues that do not require attention, run: npm audit fix

嵌入式之NB-IoT开发与应用01【移动通信网络发展概述、NB-IoT应用案例、物联网生态系统-解决方案、智慧消防项目需求分析及系统设计】-程序员宅基地

文章浏览阅读5k次,点赞4次,收藏53次。P1 1.01-01 NB-IoT课程介绍(P1)NB-IoT是什么?NB-IoT能够干什么?1、移动通信网络发展概述移动通信网络-1G移动通信网络-2G移动通信网络-3G移动通信网络-4G移动通信网络-5G移动通信网络总结NB-IoT发展历程2、NB-IoT应用案例2.1、NB-IoT智慧水务解决方案2.2、NB-IoT智慧燃气解决方案2.3、NB-IoT智慧烟感解决方案2.4、NB-IoT智慧冷链解决方案2.5、NB-IoT智能停车解决方案

推荐文章

热门文章

相关标签