C语言实现:删除链表倒数第k个元素

news2024/11/19 12:40:44

然后这里讲一下删倒数第k个元素的算法思想
我这里很简单啊,你要删倒数第k个,那不就是正数len-k+1个吗

举个例子:
比如12345
删倒数第3个,就是删正数5-3+1=3,也就是正数第3个
删倒数第2个,就是删正数5-2+1=4,也就是正数第4个

那么我知道要正数怎么删之后,我就找到要删结点的前一个也就是len-k个结点
然后就是很寻常的删除链表结点的操作了:“先连后断

一些链表基本操作这里不多赘述,笔者有数据结构专栏进行了很详细的讲解

下面是代码:

先是准备工作

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//单链表定义
//链表结点
typedef struct {//定义单链表结点类型
	int data;//数据域
	struct LNode *next;//指针域
}LNode, *LinkList;

void MyPrint(LinkList L) {//打印链表元素
	LNode* i = L->next;//用i指针遍历整个链表
	while (i != NULL) {
		printf("%d ", i->data);
		i = i->next;
	}
}

//尾插法建立单链表
LinkList List_TailInsert(LinkList* L) {
	LNode*s;//新插入结点
	int x;//结点值
	*L = (LinkList)malloc(sizeof(LNode));
	(*L)->next = NULL;
	LNode* rear = *L;
	//尾结点指针rear,这里赋值时注意对L解引用,L是指向头结点的指针,解引用才是头结点
	int arr[10] = { 6,4,3,9,7,1,2,8,10,5};//初始链表元素
	int i = 0;
	while (i != 10) {//输入9999视为结束标志
		s = (LNode*)malloc(sizeof(LNode));
		s->data = arr[i];
		s->next = NULL;
		rear->next = s;
		rear = s;
		i++;
	}
	return L;
}

int length(LinkList L) {//获取链表长度
	int len = 0;
	LNode* p = L->next;
	while (p != NULL) {
		p = p->next;
		len++;
	}
	return len;
}

然后就是该问题的解决函数及验证

void Del_k(LinkList* L, int k) {//删除链表倒数第k个元素
	LNode*p = (*L)->next;
	int len = length((*L));//获取L长度
	//删倒数第k个,就是删正数第len-k+1个
	//比如12345
	//删倒数第3个,就是删正数5-3+1=3,也就是正数第三个
	//删倒数第2个,就是删正数5-2+1=4,也就是正数第四个
	int n = len - k ;//找到第len-k个元素,也就是len-k+1前面一个元素
	for (int i = 1;i < n;i++) {//找到正数第len-k+1个
		p = p->next;
	}
	LNode*q = p->next;//删q
	p->next = q->next;
	free(q);
}
int main() {
	LinkList L = NULL;
	List_TailInsert(&L);
	printf("\n");
	printf("初始链表为: ");
	MyPrint(L);
	int len = length(L);
	printf("链表长度为%d", len);
	int k = 0;
	printf("\n");
	printf("请输入要删倒数第几个元素: ");
	scanf("%d", &k);
	Del_k(&L,k);
	printf("\n");
	printf("删除倒数第k个元素后,链表为: ");
	MyPrint(L);
}

删倒数第3个,也就是删这里的8
在这里插入图片描述
删倒数第7个,也就是删链表里的9
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1032148.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是 Sepolia 测试网以及如何从 Faucet 获取 Sepolia ETH

如何通过水龙头领取 Sepolia 测试网 ETH 代币 Sepolia 测试网需要 Sepolia ETH 代币来测试即将推出的 dApp&#xff0c;然后再在以太坊主网上线。您可以从 Alchemy、QuickNode 和 Infura 水龙头领取 Sepolia 测试网 ETH。 要点 您可以从官方水龙头和其他一些独立水龙头获取 S…

快速学习Netty

Netty框架探索&#xff1a;助力高效网络编程 一、Netty是个啥&#xff1f;二、“Hello World”服务器端实现&#xff08;Server&#xff09;客户端实现&#xff08;Client&#xff09;思考&#x1f914; 三、Netty的核心组件EventLoopChannelChannelPipelineChannelHandlerByte…

请实现一个函数,输入一个整数数组和一个目标值,在数组中找到两个数使得它们的和等于目标值。

今日份AI出笔试题&#xff1a; AI Golang笔试中级题目https://bs.rongapi.cn/1702565828114780160/23 完整题目&#xff1a; 请实现一个函数&#xff0c;输入一个整数数组和一个目标值&#xff0c;在数组中找到两个数使得它们的和等于目标值。函数应该返回这两个数的索引&am…

转载—Linux下文件搜索、查找、查看命令

Linux下文件搜索、查找、查看命令 1、最强大的搜索命令&#xff1a;find 查找各种文件的命令  2、在文件资料中查找文件&#xff1a;locate   3、搜索命令所在的目录及别名信息&#xff1a;which  4、搜索命令所在的目录及帮助文档路径&#xff1a;whereis 5、在文件中搜寻…

回收站文件恢复,这3个方法必须掌握!

“我是一名电脑小白&#xff0c;听说电脑中删除的文件会被放入回收站中&#xff0c;那么回收站里的文件应该怎么恢复呢&#xff1f;如果回收站被删除了&#xff0c;文件还有机会找回来吗&#xff1f;” 回收站作为电脑中一个功能强大的工具&#xff0c;对我们找回误删的数据有很…

数据结构-----树和二叉树的定义与性质

目录 前言 思维导图 一.树 树的定义 二.二叉树 1.二叉树的定义 2.二叉树的形态&#xff08;图&#xff09; 3.二叉树的性质 三.满二叉树 1.定义 2.特点和性质 四.完全二叉树 1.定义 2.特点和性质 前言 今天开始我们就学习新的数据结构类型啦&#xff01;没错它就是…

Ribbon负载均衡器

两种&#xff1a; 1.1 集中式负载均衡&#xff0c;服务端负载均衡 硬件 nginx 轮询、负载、哈希、随机、权重 为什么要做负载均衡&#xff1f; 1.2 客户端负载均衡器 用客户端 负载均衡器 很多机制可以自定义 小知识&#xff1a;不想让别人调自己&#xff0c;只想用别人的…

2023-9-22 没有上司的舞会

题目链接&#xff1a;没有上司的舞会 #include <cstring> #include <iostream> #include <algorithm>using namespace std;const int N 6010;int n; int happy[N]; int h[N], e[N], ne[N], idx; bool has_father[N];// 两个状态&#xff0c;选该节点或不选该…

李航老师《统计学习方法》第2章阅读笔记

感知机&#xff08;perceptron&#xff09;时二类分类的线性分类模型&#xff0c;其输入为实例的特征向量&#xff0c;输出为实例的类别&#xff0c;取1和-1二值。感知机对应于输入空间&#xff08;特征空间&#xff09;中将实例划分为正负两类的分离超平面 想象一下在一个平面…

spring:实现初始化动态bean|获取对象型数组配置文件

0. 引言 近期因为要完成实现中间件的工具包组件&#xff0c;其中涉及要读取对象型的数组配置文件&#xff0c;并且还要将其加载为bean&#xff0c;因为使用了spring 4.3.25.RELEASE版本&#xff0c;很多springboot的相关特性无法支持&#xff0c;因此特此记录&#xff0c;以方…

阿里云服务器u1和经济型e实例有什么区别?

阿里云服务器经济型e实例和云服务器u1有什么区别&#xff1f;同CPU内存配置下云服务器u1性能更强&#xff0c;u1实例价格也要更贵一些。经济型e实例属于共享型云服务器&#xff0c;不同实例vCPU会争抢物理CPU资源&#xff0c;并导致高负载时计算性能波动不稳定&#xff0c;而云…

实时更新进度条:JavaScript中的定时器和异步编程技巧

前言 在Web开发中&#xff0c;有许多场景需要实时地更新页面上的进度&#xff0c;例如上传文件、数据处理等。本文将介绍如何利用JavaScript中的定时器和异步编程技巧来实现实时更新进度&#xff0c;并探讨一些其他解决方案。 处理进度实时更新&#xff1a; 利用异步编程实现实…

可转债长期持有策略——收益与风险、利息收入、案例研究

可转债投资策略——长期持有策略 一、收益与风险的权衡 长期持有可转债是一种投资策略&#xff0c;旨在实现稳定的收益&#xff0c;并在投资期限内从可转债中获得利益。在采用这种策略时&#xff0c;投资者需要平衡可转债的收益和风险&#xff0c;以满足其财务目标。以下是关…

尝试访问启动磁盘设置时出错怎么办?

当出现“尝试访问启动磁盘设置时出错”这样的错误提示&#xff0c;而且启动转换控制面板打不开了时&#xff0c;是无法开启触摸板功能的。我们可以使用以下方法来解决问题。 1. 在Windows桌面左下角搜索框输入“计算机管理”后点击“打开”。 2. 点击“本地用户与组”&#xff…

树结构数据在table中回显 treeselect disabled

<el-table-column label"产业认定" align"center" prop"industryIdentification"><template slot-scope"scope"><treeselectv-if"scope.row.industryIdentification"v-model"scope.row.industryIdentif…

Zookeeper系统模型_客户端命令行

创建 创建ZK节点 语法结构&#xff1a; create [-s] [-e] path data acl 参数&#xff1a; -s&#xff1a;顺序节点-e&#xff1a;临时节点 默认情况下&#xff0c;不添加-s或者-e参数的&#xff0c;创建的是持久节点。 示例&#xff1a; [zk: localhost:2181(CONNECTED) …

Spring Cloud Alibaba Gateway全局token过滤、局部过滤访问时间超过50ms日志提示

文章目录 Spring Cloud Alibaba Gateway验证token在前篇的基础上加入依赖在filter包中创建tokenFilter Spring Cloud Alibaba Gateway局部过滤1.继承AbstractGatewayFilterFactory2.仿照AddRequestHeaderGatewayFilterFactory Spring Cloud Alibaba Gateway验证token 基础搭建…

linux上gitlab备份与还原

三 Gitlab备份 1.gitlab安装 1.1 添加镜像地址 添加镜像地址的目的是为了提高国内用户软件下载的速度&#xff0c;编辑(新建)文件gitlab-ce.repo&#xff0c;指令&#xff1a; vi /etc/yum.repos.d/gitlab-ce.repo复制 输入&#xff1a; [gitlab-ce] namegitlab-ce # 清华…

基于SSM+Vue的亿互游在线平台的设计与开发

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

LeetCode01

LeetCode01 两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和 为目标值 target 的那两个整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你…