结构体链表(初学)

简单创建并遍历了一个链表,写下了一些小的疑惑;


#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;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值