最近在学C++,在PTA上碰到了一道题,误解了题意以为要用链表来解决,于是去csdn寻找教程,但是看了一边感觉还是云里雾里,于是干脆自己闭门造车。。。
在这里分享一下思路,我在做了以下的思考和尝试之后再返回去看一些大佬的文章就能比较容易的理解了。
单链表:
实际上链表的原理非常简单,就是构造一个既可以储存需要的值又可以储存指向下一个结构体的结构体。
如图:
![7a7a490837e779dd74ec4629377ff03b.png](https://img-blog.csdnimg.cn/img_convert/7a7a490837e779dd74ec4629377ff03b.png)
所以我想我应该需要这么一个结构体(这里以每个结构体储存一个整型的值为例)
struct node//这里的命名采用了网上普遍的命名,node意为节点
{
int num;
struct node *next;//能够指向node型的结构体的指针
};
然后我开始思考如何模拟图中的模型:
最开始我们需要一个链表的头,于是我写了
node head;
然后我们需要在一个循环中不断向后加长这条链表直至某个条件结束,于是我写了这样的伪代码
while(条件为真)
{
加长链表
}
接下来开始思考循环之内的也就是加长链表的操作如何实现:
我分了三步:
1.第一次循环:我要从链表的头开始我的操作。
2.中间一次循环:我要使到目前这次循环内我的链表的最后一节结构体中的变量num获得一个值并用其指针next指向下一个新生成的结构体node。
3.最后一次循环:我要使我的链表的最后一节指向null。
实际上在这里可以看到除了第一次循环,我的每次循环都是针对的本次循环的最后一节进行操作,所以我需要一个一直能够指向链表的最新生成的一节的指针(我把它命名为now)并依靠它进行操作,而且我最好把上述第一次和最后一次循环的操作放在循环外进行。
所以我更新了我的伪代码
给head.num赋值
now指向head
while(条件为真)
{
新生成一个结构体并使now目前所指的结构体指向新生成的结构体;
使now指向最新生成的结构体;
给now所指的结构体内的num赋值;
}
最后一节指向null
在代码中是这样实现的(这里的条件n!=1只是随便先用上的,实际上如果是这样的条件显然不需要链表)
cin>>n;
head.num = n;
now=&head;
while (n != 1)
{
n--;
point->next = new node;
point=point->next;
point->num=n;
}
实际上到这里一个最简易的链表就完成了。
#include<iostream>
using namespace std;
struct node//这里的命名采用了网上普遍的命名,node意为节点
{
int num;
struct node *next;//能够指向node型的结构体的指针
};
int main()
{
node head,*now;
cin>>n;
head.num = n; 给head.num赋值
now=&head; //now指向head
while (n != 1)
{
n--;
point->next = new node; //新生成一个结构体并使now目前所指的结构体指向新生成的结构体
point=point->next; //使now指向最新生成的结构体
point->num=n; //给now所指的结构体内的num赋值
}
point->next=NULL; //使最后一节的指针指向空
}
未完成。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。