循环单链表的销毁操作

单链表的基本操作实现 C++代码实现单链表的创建、插入等基本操作(详细) 阅读详情

循环单链表销毁的时候,我的代码开始是这样子的

Status DestroyList_L(LinkList& L)//销毁链表
{
    Lnode* p;
 
    while (L)
    {
        p = L;
        L = L->next;
        delete p;

    }

    return OK;
}

不出意外的报错了,然后我考虑了一下原因,因为我只进行了初始化操作,所以此时这个循环单链表是空的,他的头结点的指针域指向他自己,所以其实也是释放了L的空间

然后进行下一次while循环就引发异常了,所以我考虑了一下怎么避免这个问题,然后突然想到

"我把循环单链表断链不就能当成单链表处理了吗?"

一语惊醒梦中人,但是这个时候,我对于循环单链表的理解还是不够,我想的是如下

Status DestroyList_L(LinkList& L)//销毁链表
{
    Lnode* p,*m;
    //我先找到它的最后一个结点
    p=m = L;
    while (p->next!=m)
    {
        p = p->next;
    }
    //这样子就是找到了最后一个结点
    //然后赋值为null,完美!
    p->next = NULL;
    while (L)
    {
        p = L;
        L = L->next;
        delete p;

    }

    return OK;
}

我的做法是用两个指针指向首元结点,其中一个就一直向后走直到他的next域指向首元结点,这个时候循环单链表遍历完一轮,然后现在断链,把此时的结点的next置空

然后就跟单链表的销毁一模一样了

但是我上网搜索别人的做法的时候发现了这篇博客icon-default.png?t=M276https://blog.youkuaiyun.com/qq_42957923/article/details/84970670

的实现方式,发现我多做了无用功,循环单链表的是个循环,或者说的通俗一些,他是个圈儿啊.它可以在任何地方断开啊

所以我修改我的代码如下

Status DestroyList_L(LinkList& L)//销毁链表
{
    Lnode* p;
    //我先找到它的最后一个结点
    p= L->next;
    L->next = NULL;
    L = p;
    while (L)
    {
        p = L;
        L = L->next;
        delete p;

    }

    return OK;
}

1.不为空

其中的三步操作就是让p指向首元结点,然后头结点的next域置空,然后让L指向首元结点,就是在

2.空

就单纯首元结点的指针域置空了,然后循环的时候不是垃圾值而是NULL,就不会引发异常了.

C语言实现链表的创建、销毁、删除、插入和查找(在输入界面进行操作) / 指向下一节点的指针。InsertNode(head, 34, "李英", "女", "9901");InsertNode(head, 20, "陈华", "男", "9902");InsertNode(head, 12, "王奇", "男", "9901");InsertNode(head, 26, "董强", "男", "9902");InsertNode(head, 1, "张斌", "男", "9901");InsertNode(head, 8, "刘丽", "女", "9902"); 阅读详情

相关推荐

C++实现循环单链表的基本操作

领会循环单链表存储结构和掌握循环单链表中的各种基本运算算法设计,实现循环单链表的各种基本运算和整体建表算法。

henry594xiaoli的博客 6978

销毁单向循环链表

[C++] 销毁单向循环链表

a1651950431的博客 1522

中国区ASP服务性规范考试

10、每次现场维护服务,工程师需按照400要求达到现场的时间与客户联系,在抵达现场、故障恢复后两个时间点分别向400报CALL ,如与客户联系变更到现场时间点,也需向400电话备案(400-822-9999)……20、工程师小B 在接到客户故障申报后赶到客户现场,发现问题无法解决,于是及时将情况反馈至技术支持响应工程师小C ,小B 就和小C 协商由小C 远程解决此问题,后小B 离开客户现场。18、小L 到客户现场交付安装服务。6、EPMS 中上载初验证书的命名规则为:合同号+初验的客户签署日期……

2301_76197693的博客 1910

单链表操作之删除

一、从开始处删除 从开始处删除,通常可以假设结构中至少有一个节点。这个操作返回删除项。其形式如下: # coding: utf-8 class Node(object): def __init__(self, data, next=None): self.data = data self.next = next head = None for...

aaronthon的博客 8924

在ZYNQMP上点亮800x480 LCD屏:从framebuffer到DRM框架的完整驱动移植实战

本文详细介绍了在ZYNQMP平台上点亮800x480 LCD屏的完整驱动移植实战,从framebuffer到DRM框架的技术实现。内容涵盖硬件配置、设备树设置、显示时序参数调试以及DRM驱动核心实现,帮助开发者快速掌握PetaLinux系统中的LCD驱动开发技巧。

weixin_33701294的博客 427

手把手教你排查Abaqus中的Johnson-Cook损伤参数:避免因d3正负号导致的仿真失败

本文详细解析了Abaqus中Johnson-Cook损伤参数d3正负号设置的关键问题,帮助用户避免因参数错误导致的仿真失败和Excessive distortion报错。通过对比不同文献定义、提供实操指南和典型错误排查流程,有效提升非线性分析的准确性和效率。

weixin_33960567的博客 356

【数据结构】 循环单链表的基本操作 (C语言版)

【数据结构】 循环单链表的基本操作 (C语言版)

weixin_56814370的博客 2395

永磁同步电机定子槽型设计实战:从梨形槽到矩形槽的NVH优化之路

本文深入探讨了永磁同步电机定子槽型设计在NVH优化中的关键作用,对比了梨形槽与矩形槽的性能差异。通过Ansys Maxwell仿真和实际案例,揭示了矩形槽在提升槽满率、降低电磁噪声方面的优势,并总结了五大设计黄金法则,为电机设计工程师提供了实用指导。

weixin_28740299的博客 494

循环单链表的结构和定义

#include "stdafx.h" #include<iostream> using namespace std; #include<malloc.h> enum Status{OK,ERROR}; typedef int ElemType; typedef struct Lnode { ElemType num...

anwenzhao0749的博客 2385

“双系统”出炉!瑞芯微RK3562J非对称AMP:Linux+RTOS/裸机

执行如下命令运行Linux应用程序rpmsg_echo,发送8个rpmsg数据包至运行Baremetal程序的Cortex-M0核心,当Cortex-M0核心每收到1个rpmsg数据包就会将数据包发送回Linux端。开发者可灵活分配任务或指定核心间通信,从而增强系统稳定性,减少崩溃风险,保障数据完整。下文以Cortex-A53(CPU0、CPU1、CPU2、CPU3)核心运行Linux系统与rpmsg_echo应用程序,Cortex-M0(MCU)核心运行Baremetal程序为例进行演示。

创龙,嵌入式一体化解决方案商 468

2、稳定性问题全景图——死机、重启、ANR、Crash、黑屏五大类

当 Crash 发生在 system_server、surfaceflinger、mediaserver 等关键系统进程中时,其后果等同于系统级故障,可能触发 Zygote 重启甚至 kernel panic。这类问题在稳定性治理中的优先级应等同于 P0。

woailuojp的博客 50

循环单链表的初始化、插入、删除、按位遍历、融合、销毁、求节点数等操作(C语言实战题代码详解)

一、循环单链表的抽象数据类型定义: #include&amp;amp;amp;lt;stdio.h&amp;amp;amp;gt; #include&amp;amp;amp;lt;stdlib.h&amp;amp;amp;gt; #define OK 1 #define ERROR 0 typedef int Elemtype; //数据类型重定义 typedef int Status;

苍之羽 9948

Tesla v100 4张显卡组装机安装vllm和ollama在Ubuntu系统上的安装---AI大模型系统从零开始0032

本文提供Ubuntu22.04系统下vLLM的完整安装指南,适配4×32G Tesla显卡的单机4卡张量并行部署。教程包含:1)硬件要求(Ubuntu22.04、NVIDIA驱动≥535、CUDA12.1+);2)NVIDIA驱动自动安装方法;3)Python3.10虚拟环境配置;4)vLLM官方预编译包一键安装;5)单机4卡启动Qwen3.6-27B模型的完整参数说明(含FP8量化、多进程并行等关键配置)。文末附分布式部署的Ray集群方案参考链接,适用于多机8卡场景。

添柴程序猿的专栏 187

数据结构——循环单链表【c语言版】

循环链表包括循环单链表和循环双链表 循环单链表的结点类型与非循环单链表相同,把非循环单链表改成循环单链表只需要将非循环单链表的尾结点next指针由原来的NULL改为指向头节点,自此就将非循环单链表形成看一个环,从表中的任一结点出发均可找到链表中其他的结点,这就是带头节点的循环单链表。 循环单链表的操作与单链表基本一致,差别在于遍历链表时,判别当前指针p是否指向表尾结点的终止条件不同: 单链表:p->next != NULL 循环单链表:p->next !=...

clear-ninghongkang的博客 3068

医图论文 Arxiv‘24 | 自我先验引导的 Mamba-UNet 网络在医学图像超分辨率中的应用

作者提出了一种自我先验引导的 Mamba-UNet 网络(简称 SMamba-UNet)用于医学图像超分辨率。现有方法主要基于卷积神经网络(CNNs)或 Transformer。基于 CNN 的方法无法捕捉长距离依赖关系,而基于 Transformer 的方法由于其二阶计算复杂度,面临沉重的计算挑战。最近,状态空间模型(SSMs)尤其是 Mamba 出现了,它能够以线性计算复杂度建模长距离依赖。

小白学视觉 262

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

循环单链表的创建,遍历和销毁

循环单链表的简单操作 因为循环单链表和单链表的插入,删除等操作大同小异 ,因此我只总结了循环链表的创建,遍历以及销毁操作 循环链表的定义 //定义一个单链表 typedef struct LNode { int data; struct LNode* next; }LNode, *LinkList; 虚幻链表的创建 //创建一个指定大小的循环链表 void CreateLoopList(Li...

Sock的博客 4359

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

带头结点的单链表就地逆置_循环单链表_C语言「抄作业」

C语言「抄作业」系列之循环单链表#include <stdio.h> #include <stdlib.h> #include <conio.h> #define lElemType int /* 循环单链表元素数据类型 */ #define LNODE_SIZE sizeof (struct lNode) /* 循环单链表结点空间大小 */ #def...

weixin_39748445的博客 525

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

单链表的操作

单链表是一种重要的线性数据结构,由一系列节点组成。每个节点包含两个部分:1.数据域:储存实际的数据。2.指针域:储存指向下一个节点的指针(或引用)。图一。

lxscxk的博客 972

c语言循环单链表

/************************************************************************* &gt; File Name: singleLineTable.c &gt; Author: zshh0604 &gt; Mail: zshh0604@.com &gt; Created Time: 2014...

weixin_33849215的博客 100

数据结构--循环单链表

循环单链表 循环单链表是单链表的另一种形式,其结构特点链表中最后一个结点的指针域不再是结束标记,而是指向整个链表的第一个结点,从而使链表形成一个环。和单链表相同,循环链表也有带头结点结构和不带头结点结构两种,带头结点的循环单链表实现插入和删除操作较为方便。一个带头结点的循环单链表如下图所示: 代码实例: CSList.h #ifndef CSLIST_H_ #define CSLI

u010995263的专栏 799

C语言 带有头结点的循环单链表的实现和相关操作。

C语言 带有头结点的循环单链表的实现和相关操作。 #include<stdio.h> #include<stdlib.h> typedef int DAT; typedef struct node { DAT data;//数据 struct node *next;//指向下一个结构体 }Node; typedef struct { Node *head;//指向链表的头节点 unsigned size;//节点的个数 }list; void init_list(li

ok_阿伟的博客 1471

数据结构入门:带头双向循环链表(从入门到精通)

带头双向循环链表,数据结构的必备知识

yin_ming_hui的博客 2160

循环单链表各种基本算法实现及示例

#include<stdio.h> #include<malloc.h> typedef char ElemType; typedef struct LNode { ElemType data; struct LNode *next; }LinkList; void InitList(LinkList *&L) { L=(LinkList *)malloc(s...

qq_46026740的博客 1462

循环但链表各种基本运算

 函数:1.Initlist(sqlist *&l):初始化循环单链表l.2.Destroylist(sqlist *l):释放循环单链表l.3.Listempty(sqlist *l):判断循环单链表l是否为空表.4.Listlength(sqlist *l):返回循环单链表l的元数个数.5.Displist(sqlist *l):输出循环单链表l.6.Getelem

ヤ冰楓ˊ﹋ろ 925

数据结构(单链表和循环单链表)

​ 链式存储中,所有节点的存储位置是随机的,他们之间的逻辑关系用指针来确定,跟物理存储位置无关,因此从上述示例代码可以很清楚看到,增删数据都非常迅速,不需要移动任何数据。另外,又由于位置与逻辑关系无关,因此也无法直接访问某一个指定的节点,只能从头到尾按遍历的方式一个个找到想要的节点。另外注意到,整条链表用一个所谓的头指针 head 来指向,由 head 开始可以找到链表中的任意一个节点。由于链表中的各个节点被离散地分布在各个随机的内存空间,因此销毁链表必须遍历每一个节点,释放每一个节点。

jxcklfn的博客 968

带头双向循环单链表

将tail-.>-next指向newnode,newnode的prev指向tail,这时newnode成为新的尾,所以将newnode的next指向头结点也就是pHead,最后将pHead的prev指向newnode,恢复循环。通过pHead的next找到第一个节点或哨兵位本身并保存下来, 将pHead的next指向newnode,newnode的prev指向pHead,newnode的next指向prev,prev的prev指向newnode。11、双向链表删除pos位置的节点。

black_bear_white的博客 827
上一篇: 参数方程求二阶导时候不能直接把y,x分别对t求二阶导然后再相除作为d²y/dx²的原因
下一篇: 浙江工商大学OJ第6题
chenmozero
博客等级 码龄5年 2粉丝 9原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值