关键词:
北京中关村;海淀黄庄;北京大学;清华大学。少儿编程;中小学编程;信息学竞赛;计算机竞赛;NOIP;NOIP竞赛;CSP-J/S竞赛;NOI竞赛。信息学奥林匹克;东坝;北京中学。面向6-18岁中小学生,做最专业的中小学编程教育。信息学研讨会;家长;学生;关心问题;少儿编程问题解答。
/*
思想:链表解题思路
1、生成链表结构
2、生成链表:条件,通过循环创建,我们的条件是:输入为0结束。
3、循环到最后为NULL,打印。
4、删除整个链表,不用的时间释放所有资源.
思想:先保存head,head后移,然后保存的删除。一直循环到最后就可以了。
*/
#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、官方网址:
B、微信公众号:
添加微信,获取资料。
关注公众号,获取动态。