作业C2--删除整个链表--从前到后(信奥基本功:小学3年级)

2022-07-09 已有0人阅读 作者: IT航班

中小学编程红宝书.zip

关键词:

北京中关村;海淀黄庄;北京大学;清华大学。少儿编程;中小学编程;信息学竞赛;计算机竞赛;NOIP;NOIP竞赛;CSP-J/S竞赛;NOI竞赛。信息学奥林匹克;东坝;北京中学。面向6-18岁中小学生,做最专业的中小学编程教育。信息学研讨会;家长;学生;关心问题;少儿编程问题解答。

/*

思想:链表解题思路

1、生成链表结构

2、生成链表:条件,通过循环创建,我们的条件是:输入为0结束。

3、循环到最后为NULL,打印。

4、删除整个链表,不用的时间释放所有资源.

   思想:先保存head,head后移,然后保存的删除。一直循环到最后就可以了。 

                                               Honeyview_640 (6).jpg

 

*/

#include <iostream>

using namespace std;

 

//一个链表至少包含一个数据域,和一个地址域,是下一个结点的地址。

struct Node

{

int num;      //数据域

Node *next;   //地址域

};

 

//创建链表 

Node *Create()

{

Node *head,*p1,*p2;                       //head 头永远不懂,  p1循环创建,赋值    p2就是连接上,然后追上p1。大家可以自己画图

head = p2 = p1 = new Node();              //先开辟第一个结点

cin>>p1->num;                            //输入值

if(p1->num == 0)//如果第一个结点为0 ,等于链表不创建 

{

delete head;   //为0了,就删除头了。

return NULL;   //然后返回空

}

while(true)//死循环 

{

p1 = new Node();  //开辟结点

cin>>p1->num;      //输入值

if(p1->num == 0)//为0时间结束 

{

delete p1;     //为0 结束删除刚才创建的

break;

}

p2->next = p1;//p2是前一个结点,前一个结点的next域要和新创建的结点连接起来。 

p2 = p1;      //p2要追上p1

}

p2->next = NULL;//最后结点的next域为空 

return head;    //返回头结点

}

 

//就是循环到最后一个结点,最有一个结点为NULL。说白了就是循环。要保存好头结点。如果不保存,打印后,头结点找不到了。

void Disp(Node *head)

{

Node *temp = head;

while(temp!=NULL)//一直循环到最后打印 

{

cout<<temp->num<<"\t";

temp = temp->next;     //如果少了这一句,将会是死循环。

}

cout<<endl;

}

 

//从前到后删除整个链表 

void Delete1(Node * head)

{

while(head!=NULL)//一直循环到最后 

{

Node *temp = head;//保存当前head 

head = head->next;//head向后移动 

cout<<"删除数据为:"<<temp->num<<"  的结点"<<endl;

delete temp;      //删除刚才保存的 

}

 

int main()

{

Node *head = Create();//创建链表

Disp(head);           //打印链表

Delete1(head);        //删除整个链表 

}

联系方式:

A、官方网址:

http://www.itflight.net


B、微信公众号:

添加微信,获取资料。

image.png

 



关注公众号,获取动态。

image.png