简单创建并遍历了一个链表,写下了一些小的疑惑;
#include<iostream>
using namespace std;
struct Node{
int a;
Node *next;
};
int main(){
Node *H,*s;
H=new Node;//初始化并申请一单位的动态内存空间
H->next=NULL;//起安全性作用,防止内存泄露,在此函数中不影响运行结果
Node *p=H;//*p是指针变量,H是指针(*H)的首地址
// 是为什么要这样做呢?
// 1.要记录链表的起始点(或者说不能随意更改,因为都是一次性的)(数组不是一次性的就是因为它的首地址一直没变)
// 2.当我将该行改为Node *p;p=H;获得同样结果。为什么呢?
Node *T;
T=H;
int n;
cin>>n;
cout<<"00H->a = "<<H->a<<endl;
for(int i=0;i<n;i++){//*p起到链接的作用(链接H和s),*s起到存放内容(值e)
int e;
cin>>e;
s=new Node;s->next=NULL;s->a=e;//s->next=NULL并非没有起到实际作用,保证了s的最后一项一定一直为空
p->next=s;//***很重要,起链接作用
p=s;//结构体的传递(地址的传递),此时*p的地址p==p->next;因为最新的一项s->next==NULL,所以当关于p的链表(如H)遍历的最后一项能为NULL
cout<<"01p->a = "<<p->a<<endl;
}
//H=H->next;
while(H->next){//1//一次性遍历,所以是否不应该动用母体
H=H->next;
cout<<"10H->a = "<<H->a<<endl;
}
while(T->next){//2//在1的想法上,把母体于1之前提前复制,能获得多个链表
T=T->next;
cout<<"11T-> = "<<T->a<<endl;
}
return 0;
}