单链表删除 清空链表过程注释

void List::ClearList(){//清空链表
Node *currentNode=m_pList->next;
while(currentNode!=NULL)/
{
Node *temp=currentNode->next;
delete currentNode;
currentNode=temp;
}
m_pList->next=NULL;

        m_pList->data=0;//这个的含义是表头数据为0吗
0

2个回答

你这个代码的实现的方式是
从链表的头开始,往后,temp保存的是待删除的节点后一个节点,而currentNode是待删除的节点,每次释放currentNode,而让temp成为新的currentNode(让temp的下一个节点成为temp)
最后是清理头节点(让它的数据域data=0,指针域next\null)

这个代码其实有两个问题,第一,头节点也是普通节点,那么头节点的 data = 0,说明它是空的么?还是只有一个节点,并且这个节点的数据是0呢?没法区别。解决办法是,引入一个没有数据域的头指针,比如叫header。
第二个问题,一旦循环删除失败,那么完蛋了,从失败开始往后的内存全部泄露了。解决办法是从后往前删除。

0

坐等正确答案出现,我负责把正确答案回的得更精确这个环节。

0
pat_ti
HEIMIIY 哈哈哈哈哈你可以答啊就采纳你了
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
数据结构-单链表的读取,插入与删除
链表定义:struct ListNoden{n int value;n ListNode *next;n};单链表读取在顺序存储结构中,比如数组中,想要获取某一个位置的数据是非常容易的一件事,但是在链表中却要麻烦一些,因为链表的存储单元并不是连续的,而且我们只知道链表的头结点,也就是想知道第i个位置的数据,只能从头找下去,并没有什么其他的好方法。 n需要注意的是,如果i大于链表的长度的话程序会异
单链表删除 清空链表过程注释
void List::ClearList()//清空链表n Node *currentNode=m_pList->next;n while(currentNode!=NULL)/n n Node *temp=currentNode->next;n delete currentNode;n currentNode=temp;n n m_pList->next=NULL;n n n m_pList->data=0;//这个的含义是表头数据为0吗
链表的创建,插入,删除,查询,合并,清空,销毁(带头结点)
带头结点链表的创建,插入,删除,查询(头部插入)#include<iostream>n#include<cstdio>n#include<malloc.h>nn#define OVERFLOW -2n#define ERROR -1ntypedef struct LNode{n int data;n LNode *next;n}LNode,*Link...
链表的销毁和清空c++程序
*******************************************//链表的销毁void ClearLinkList(LinkNode **pHead) //传入为二级指针,否则不能将其他节点置为nullptr{ if(*pHead == nullptr) //判断是否为空链表 { cout<<"This is an empty LinkList"&...
c++之链表篇1:单向链表的创建,打印,删除,插入,销毁等基本操作
在牛客网上刷题的过程遇到很多链表的问题,所以自己又结合着传智播客上的视频把链表整理了一下。rn#include nusing namespace std;n//链表的的结点nstruct ListNode {n int val;n struct ListNode *next;n ListNode(int x) :n val(x), next(NULL) {n }n};n//创建一个单向链表nL
c++链表的创建,插入和删除
c++链表的创建,插入和删除简单的综合,适合初学者
C语言实现链表之单向链表(四)清空链表
C语言实现链表之单向链表(四)清空链表nnn    上一篇文章给出了创建链表的函数,本篇文章将给出清空链表的函数,程序如下。nnn/*============================================================================== n* 操作 :清空链表,释放结点内存,将链表重置为空表n* 操作前:ppHeadNod
链表删除.c
#include<stdio.h>#include<stdlib.h>#define LEN sizeof(node)typedef struct student{ char id[20]; char name[10]; char x[10]; int year; struct student *next;}*List, node;List phead;List creat...
链表的清空操作
nntypedef struct _NodeListn{n void *nodeItem;n struct _NodeList *next;n}NodeList;nnvoid Node_free( NodeList *nList )n{n Nodelist *next;n while( nList != NULL ){n next = nList->ne...
C++类的思想实现单链表的插入、删除操作
//定义两个类:一个类用来保存节点信息 数据、下一个节点的地址n// 一个类用来保存头节点,以及链表操作函数:插入,打印,删除等nclass noden{npublic:n string m_data;n node *m_next;n};nnclass MyListn{npublic:n MyList();n MyList(stri...
链表(C语言)删除、插入(头插法)、清空等操作
几个重要知识点:rn一:rnL = (LinkList)malloc(sizeof(LNode));rn L->next = NULL;rnrn在给节点分配内存后,一定要将next指针赋值为null。rn二:rnStatus ListInsert(LinkList &L, int i, ElemType e)rnrn为什么有些函数参数前带&号?rn答:&是取地址的意思,传递变量的指针
链表栈的基本操作的实现---入栈、出栈、清空
利用链表的结构实现栈的功能---入栈、出栈、清空rn代码如下:rnlinkstack.h  链表栈的头文件rn#include nnclass Node n{npublic:n int data;n Node * next;nn};nnclass stackn{nprivate:n Node *head;n Node *pcurr;n int length;nnpublic:n stack()n
java遍历单链表(删除尾结点、添加)
npackage 每日算法题;nnimport java.awt.*;nimport java.util.Collection;nnpublic class 链表 <T>{n public Node head;//头结点n public Integer N=0;//结点个数n class Node{n public int date;n p...
单链表的删除算法Delete
1.删除操作n删除操作是将单链表的第i个结点删除。因为在单链表中结点ai的存储地址在其前驱结点ai-1的指针域中,所以必须首先找到ai-1的存储地址p,然后令p的next的域指向ai的后继结点,即把结点ai从链上摘下,最后释放结点ai的存储空间。n算法用伪代码描述如下:nn2.删除算法的时间主要消耗在查找正确的删除位置上,故时间复杂度亦为O(n)。单链表删除算法的C++描述如下:nnn...
单链表的删除与插入(C++)
简单单链表的删除与插入n问题1:删除值为x的节点的后继结点n问题2:删除值为x的节点的前继结点nn问题3:在值为x的节点后添加一个值为y的节点n#include nusing namespace std;n//Nodenstruct Node{n int data;//数据域n Node* next;//指针域n Node();//构造n Node(int elem, Node* lin
单链表的创建、初始化、插入、删除 、输出、求表长、清空、查找操作
//单链表的创建、初始化、插入、删除 、输出、求表长、清空、查找操作 n#includen#includen#includen#define N 5n#define ERROR 0n#define OK 1ntypedef struct node{ //定义节点 n int data;n struct node *next;n}linklist;nlinklist *Initlist()
单向循环链表创建、遍历、插入、删除、查找(按位置,按元素值)、清空、销毁
SinglyLinkedCirculayList.hrn#include "stdafx.h"n#include "iostream"nusing namespace std;ntypedef struct LNode {n int data;n struct LNode *next;n}LNode, *LinkedList;n//创建链表nbool createLinkedList(Linked
单链表的删除操作的实现
建立长度为n的单链表,删除第i个结点之前的结点。Description第一行为自然数n,表示链式线性表的长度; 第二行为n个自然数表示链式线性表各元素值; 第三行为指定的删除参数i。 Input指定删除位置合法时候,输出删除元素后的链式线性表的所有元素,元素之间用一个空格隔开。 输入不合法,输出"error!"。Output123451 2 3 4 53Sample Input11 3 4 5#i
顺序表和链表的清空,销毁,构造函数
一.构造函数nnnn在定义对象时调用构造函数,构造函数是用来建立一个空表nnnn1.顺序表构造函数nnlen,size,elem,这仨合起来看作是表的头目,调用构造函数首先为这个“头目”这仨数据分配空间,表的元素有没有空间分配要看m的值。 n↓主要是关于空间的分配问题↓ n①构造函数是来建立一个空表,令len=0,就说明没有数据元素这就是一个空表了。至于有没有空间,也就是size是多少与空表没有关...
链表的删除操作
趁着今天还有点时间,再分享一题,这里有两个题目,题目一:给定单项链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。思路:把非头节点和尾节点的后一位节点的值覆盖到要删除的节点,然后把删除的节点的next指向它下一个节点的下一个节点就OJBK了如:1->2->3->4    需要删除3,那么把3覆盖到2那里得到    1->3->3->4    然...
数据结构(C++)----单链表模板类
所有的文件都在List.h文件下#ifndef LIST_Hn#define LIST_Hn#include<iostream>n#include<stdlib.h>using namespace std;template<class Type>nclass List;template<class Type>nclass ListNoden{npublic:n friend class Lis
java实现单链表的增加,删除,查找,打印
原文地址:http://liuyanzhao.com/2230.html n刚才传了一个java实现顺序表的基本功能的代码,下面是单链表的。同为笔记,以为回顾 n文件名App.javan/*编写类,实现如下功能:n *1、创建有序单链表n *2、包含如下基本操作:初始化、增加、删除、查找、打印元素n * 注意:初始化不同于用new 创建元素。n *n *目的:n * 1、理解成员变量、成员方法的
如何使用C++递归来删除单链表中某一个由用户输入特定的值
之前小编写了一些关于用C++递归来实现某种功能在不同的数据结构中,现在,小编还继续用递归来实现在单链表(LLL)中删除某一个特定的值,说明,因为小编所学的都是英文教材,所以在写的时候会夹杂着英文来进行表达,多学点英语还是好处的,再说了代码就是字母。回归正题,为了解决这道题,就需要要特别考虑到尾指针(tail pointer),因为在.h 文件里有用head pointer 和 tail pointe
关于删除链表结点的小结(Java)
链表删除首结点很简单,只需要让first = first.next即可。主要讨论删除中间链表。 private Node first;n private class Node{n private Node next;n private Item item;n }n //先写一个链表结点的嵌套类n public Item pop() {n Item it
在链表中删除所有x元素的结点的递归实现和非递归实现
nn//用递归删除值为x的节点nvoid Del_X_3(LinkList &amp;amp;L,ElemType x)n{n NODE *p;//p指向待删除的节点n if(L==NULL)n {n return;n }n if(L-&amp;gt;data == x)n {n p = L;n L=L-&amp;gt;next;n ...
单链表 c实现 详细注释
经过很长时间的研究,因为刚学指针就像拿单链表来实现以下, n单链表其实只要理解了 指针域的移动就不是问题了 n从开始的抄代码 到后面的自己写 n参考书目《大话数据结构》#include <stdio.h>n#include <stdlib.h>n#include <time.h>//创建单链表的成员 其实就是结点n//link p; p就是一个结点ntypedef struct Link {
单链表删除(Delete)或者去除(Remove)节点面试题总结
单链表删除(Delete)或者去除(Remove)节点面试题总结
C++实现单向链表的增加、删除、读取功能
链表相比于数组的优势有: n1. 增加和删除元素效率非常高; n2. 可以不需要预先知道存储元素的数量。 n相比于数组的劣势有: n1. 查找元素的效率低; n2. 由于存储额外节点指针,带来的空间消耗。nn采用C语言形式实现插入和删除两个函数nn//插入元素nbool InsertNode(Node* p, int index, int data)n{n Node* pCur = p;n...
链表节点被删除时的资源释放
【问题】n&nbsp;&nbsp;众所周知,链表结构相对于数组结构的一个优秀之处在于其删除元素操作仅靠更改指针指向即可完成,而数组则需要移动元素。但链表中被删除的元素所占用的资源是否需要被释放?n【分析】n&nbsp;&nbsp;nn...
链表的初始化、遍历、删除、插入、判断是否为空、求长度 C语言实现
#include n#include n#include nntypedef struct Noden{n int data;n struct Node *PNext;n} NODE,*PNODE;nnPNODE Init();nvoid Traverse(PNODE pHead);nbool Insert(PNODE pHead,int pos,int val);nbool Dele
C语言创建链表的基本操作——建立、插入、删除、清空、销毁
#include &amp;amp;amp;lt;stdio.h&amp;amp;amp;gt;n#include &amp;amp;amp;lt;stdlib.h&amp;amp;amp;gt;nnstruct node {n int value;n struct node * next;n};ntypedef struct node nodes;nnnodes *LinkList_Init();nvoid Insert_value(int value_in, nodes *...
单链表——基本操作(求表长、查找、插入、删除)(java)
public class LinkedList {nn public Node first;//定义头结点n public LinkedList(){n this.first=null;n }n n //定义节点类n public class Node{n int data;n Node next=null;n public Node(int data){n this.data=
单链表的创建(头插法尾插法),插入,删除
#include n#include n#include nusing namespace std;ntypedef int ElemType;ntypedef struct Noden{n ElemType data;n struct Node *next;n}Node,*LinkedList;n//把struct Node *定义为新类型LinkList,是一个结构体的指针。nvo
对单链表进行插入、删除、查找操作
根据键盘输入数据建立一个单链表,并输出该单链表;n 根据屏幕菜单的选择,进行数据的插入、删除、查找操作,并在插入或删除后,再输出单链表;n n#include&amp;lt;stdio.h&amp;gt;ntypedef struct LNoden{n int data;//节点的数据域n struct LNode *next;//节点的指针域n}LNode, *LinkList;//LinkList为指向结构体...
链表的简单操作(插入,删除,置反,输出,合并,去重)
链表的核心就是指针,初接触可能不太熟悉。不会用就多用,熟能生巧rnrnrn定义一个结构体类型,其中由数据类型和指针构成。有指针就相当于知道了门牌号,可以依次知道下个元素rntypedef struct node{nint data;nstruct node *next;n}Node,*LinkList;rnrn链表的初始化,分配内存,判断是否有内存,头结点为空勿忘rnLinkList initai
单链表的基本操作头插法尾插法创建插入删除遍历
单链表的基本操作,单链表头插法、尾插法、创建、插入、删除、遍历
java删除单链表中的重复节点
package offer; n/* n * 1、删除单链表中的重复节点 n * 输入 : 2, 3, 3, 5, 7, 8, 8, 8, 9, 9, 10 n * 输出 : 2 5 7 10 n * n * 2、单链表中重复节点只保留一个 n * 输入 : 2, 3, 3, 5, 7, 8, 8, 8, 9, 9, 10 n * 输出 : 2 3 5 7 8 9 10 n * n *
链表的基本操作之插入、删除、逆置
提到链表,无非就是指针指来指去,最终连成一个链。好多人困惑的地方就在于p->next=r->next,指针到底是如何指向的,弄清楚这个,删、查、排的操作也就很容易弄懂了。
【链表】单链表创建,删除,插入,查找
链表链表是线性表的链式存储结构,是用一组任意的存储单元存储线性表的数据元素(存储单元在内存中是不连续的)。 n每个数据单元有两部分组成,一个是数据域,存储数据值;另一个是指针域,指向下一个数据单元。这样的数据单元叫做结点。优点相比于顺序表,在插入和删除元素时,效率很高;缺点:链表的元素是不支持随机访问的,想要知道某个元素,只能从头结点开始遍历整个链表,因此链表访问随机元素的平均时间复杂度是O(n);
python---删除链表中的元素
#! conding:utf-8n__author__ = "hotpot"n__date__ = "2017/11/13 10:37""""n删除链表中等于给定值val的所有节点。n给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5。n"""nclass ListNode:n def __init__(self, x):
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java中的单链表学习 java 链表学习