将一个链表分为奇偶两个链表

2023-11-06

1. 问题描述:

设计一个算法,将一个头结点为A的单链表(其数据域为整数)分解成两个单链表A和B,使得A链表只含有原来链表data域为奇数的节点,而B链表只含有原链表中data域为偶数的节点,而且保持原来的顺序

2. 思路分析:

① 这个问题不是在线网上评测系统上的,所以没有标准的输入和输出数据,只能够通过简单的数据来判断程序的逻辑是否正确,首先在将原来的链表分开之前,我们需要将创建出一个单链表,这里使用一个给定的数组来创建出单链表这样的话测试起来比较方便,也可以修改为在控制台输入数字来创建歘相应的链表

② 创建出单链表之后那么需要扫描整个链表,判断当前节点的数据域是否是偶数,假如是偶数的话那么将节点插入到链表B中,并且修改原来链表的指针指向问题,也就是在原来链表中删除这个节点(修改前一个指针的指向,为指向下一个节点的下一个节点)

在删除之前我们需要使用一个临时的变量来进行保存一下需要删除的节点的,因为我是需要将此节点插入到链表B中的,所以需要保存起来,然后在原来的链表中修改指针的指向,将待删除节点的前一个节点的指针指向待删除节点的后一个节点

为了方便我们可以在循环的时候设置成判断条件是p->next!=NULL这样我们就可以知道待删除节点的前驱节点是谁了

③ 我感觉主要是链表之间的指针指向的修改,在不清楚元素之间的指向的时候那么我们可以画出具体的图来帮助理解,写多了程序这些指针的指向自然就比较清楚了

3. 下面是具体的代码:

#include<iostream>
#include<malloc.h>
using namespace std;
typedef struct node{
	int data;
	node *next;
}LNode; 
LNode *L;
LNode* create(LNode *L, int arr[], int n){
	L = (LNode*)malloc(sizeof(LNode));
	L->next = NULL;
	LNode *p = L;
	for(int i = 0; i < n; ++i){
		LNode *newNode = (LNode*)malloc(sizeof(LNode));
		newNode->next = NULL;
		newNode->data = arr[i];
		//头插法
		p->next = newNode;
		p = p->next; 
	}
	return L;
}

//分离的方法 
void spilt(LNode *L, LNode *B){
	LNode *p = L;
	B = (LNode*)malloc(sizeof(LNode));
	B->next = NULL;
	LNode *q = B;
	LNode *r;
	while(p->next != NULL){
		if(p->next->data % 2 == 0){
			//下面处理的是取下链表中的偶数节点插入到链表中 
			//偶数的时候取出来插入到链表B中 
			r = p->next;
			p->next = p->next->next;
			//q指针向下移动
			q->next = r;
			r->next = NULL;
			q = q->next;
			
		}else{
			p = p->next;		
		}	
	}
	//输出链表A的内容 
	LNode *s = L;
	while(s->next != NULL){
		printf("%d ", s->next->data);
		s = s->next; 
	} 	
	
	cout << endl;
	//输出链表B的内容 
	s = B;
	while(s->next != NULL){
		printf("%d ", s->next->data);
		s = s->next; 
	} 	
}

int main(void){
	int arr[12] = {12, 43, 2, 10, 100, 89, 11, 56, 45, 34, 77, 11};
	LNode *head = create(L, arr, 12);
	LNode *B; 
	spilt(head, B);
	return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将一个链表分为奇偶两个链表 的相关文章

随机推荐

  • 【华为OD机试】求最多可以派出多少支团队(C++ Python Java)2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 题目描述 用数组代表每个人的能力 一个比赛活动要求参赛团队的最低能力值为N 每个团队可以由1人或2人组
  • 基于SpringBoot的疾病预防系统的设计与实现

    系统合集跳转 一 系统环境 运行环境 最好是java jdk 1 8 我们在这个平台上运行的 其他版本理论上也可以 IDE环境 Eclipse Myeclipse IDEA或者Spring Tool Suite都可以 tomcat环境 To
  • 一个div里有多个a标签,改变a标签的字体颜色方法

  • 抓包工具_Charles使用

    目录 1 Charles准备工作 2 Charles抓包原理 3 Charles抓包步骤 4 Charles抓包分析 5 Charles重发请求 1 Charles准备工作 Charles是一种抓包工具 和fiddler mitmproxy
  • tuts4you上lena‘s40个crackme(1)

    本来是不打算写文章了 因为懒 想以后通过录屏的形式保存一下自己学的路程 但奈何开学后一直没找到机会 在宿舍也不愿意大吼大叫的讲东西 只好再写写文章了 最近学了一些汇编语言和逆向工程 所以就想通过这40给题目来看一看成效 这篇文章是第一题 博
  • SpringMVC框架学习笔记整理-动力节点王鹤(无必详细)

    继续整理了Springmvc的学习笔记 动力节点王鹤老师讲的springmvc 分享给大家 看了这么多网上的视频 还是只有王鹤老师讲的能听明白 就喜欢讲的细的 而且老师条理很清晰 视频资源 https www bilibili com vi
  • 对MRTK中HandInteractionExamples实例的一些理解

    文章目录 前言 一 按钮 二 边界框 三 操作示例 四 滑动条 五 其它 前言 对HoloLens实例的一些浅陋的理解 大部分为官方自己解释 一 按钮 BoxCollider 按钮前板的Box Collider PressableButto
  • 欧莫,github一看就懂【纯小白】

    教程 一看就懂 Github基础教程 哔哩哔哩 bilibili 分享原因 一不小心刷到的 对小白来说真的很友好 因为我也被github上的英文吓到过 突然刷到这样简单直白的介绍 忍不住分享一波u 2 giehub免费加速 教程 手把手教你
  • 语音端点检测(Voice Activity Detection,VAD)

    本文内容均翻译自这篇博文 该博主的相关文章都比较好 感兴趣的可以自行学习 Voice Activity Detection VAD Tutorial 语音端点检测一般用于鉴别音频信号当中的语音出现 speech presence 和语音消失
  • Java PrintWriter.write()方法具有什么功能呢?

    转自 Java PrintWriter write 方法具有什么功能呢 下文讲述java中PrintWriter write 方法的功能简介说明 如下所示 PrintWriter write 方法的功能 同print方法基本一致 print
  • 模式识别(1)协方差矩阵相关和K-means聚类算法实现(含源码)

    模式识别实验一 实验一 协方差矩阵和矩阵特征值 特征向量的计算 题目简介 给定一组数据 实现该组数据的协方差矩阵的计算 并用代码实现计算一个方阵的特征值和特征向量 一 协方差部分 1 协方差的定义 协方差在概率论和统计学中用于衡量两个变量的
  • java-maven的使用

    一 加载maven项目 1 idea工具栏file open 选择项目加载进来 2 右键pom xml 选择add as maven project 3 如果在pom xml上的某个依赖一直报红且依赖本身没有问题 本pom其他的依赖也没有问
  • 面试概率题目

    概率题目 现在的面试中 大部分公司都会问道概率相关的问题 我们现在给出几道常见的概率问题 1 三角形问题 题目 给你一根铅笔 将铅笔折两次 组成三角形的概率是多大 解析 设 铅笔长度是1 折两次之后 得到三条边 对应的长度分别是x y 1
  • css3实现动画的三种方式

    css实现动画主要有3种方式 第一种是 transition实现渐变动画 第二种是 transform转变动画 第三种是 animation实现自定义动画 transition渐变动画 过渡 语法格式 transition 要过渡的属性 花
  • win10 凭据管理

    点击WIN10左下角的开始选项 选择所有程序 找到WINDOWS系统 点开找到控制面板 打开控制面板 找到里面的 凭据管理器 打开凭据管理器 找到 WINDOWS凭据 然后点击 添加WINDOWS凭据 进入凭据添加页面 添加WINDOWS凭
  • 图像分割中的损失函数

    图像分割中的损失函数 文章目录 图像分割中的损失函数 前言 一 交叉熵损失 二 Dice loss 三 Focal loss 四 IOU损失函数 总结 前言 在深度学习中 所有算法都依赖于最小化或最大化一个函数 称之为损失函数 损失函数用于
  • 蓝桥杯基础练习(1)---数列排序

    一 数列排序问题的解决 问题描述 给定一个长度为n的数列 将这个数列按从小到大的顺序排列 1 lt n lt 200 输入格式 第一行为一个整数n 第二行包含n个整数 为待排序的数 每个整数的绝对值小于10000 输出格式 输出一行 按从小
  • 全球13台DNS根服务器分布:

    全球13台DNS根服务器分布 美国VeriSign公司 2台 网络管理组织IANA Internet Assigned Number Authority 1台 欧洲网络管理组织RIPE NCC Resource IP Europeens N
  • 解决curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused 问题

    自动化使用要去下载图像识别的工具 Tesseract mac 需要用到brew 但是我的电脑没有 就先需要下载homebrew 然而按照官网的命令 bin bash c curl fsSL https raw githubuserconte
  • 将一个链表分为奇偶两个链表

    1 问题描述 设计一个算法 将一个头结点为A的单链表 其数据域为整数 分解成两个单链表A和B 使得A链表只含有原来链表data域为奇数的节点 而B链表只含有原链表中data域为偶数的节点 而且保持原来的顺序 2 思路分析 这个问题不是在线网