头插法创建链表

题目:递归创建链表,从键盘上顺序输入整数,直到输入的整数小于0时才停止输入。然后反序输出这些整数。

注意:反序通过头插法创建链表实现,即后创建的节点先输出
【note】单向链表有两种创建方式:1.头插法;2.尾插法;其中又分为带头节点和不带头结点。下面使用了不带头结点的头插法。
如果需要头结点,只需让node *p=head->next。

以下附代码:

struct node
{
    int data;
    struct node *next;
}*p,*head;                                  //p是一个灵活的指针,head是头指针,通过head指针才能找到链表
void input()
{
    int num;
    struct node *q;                         //新建立首节点q
    cout<<"Enter data:";
    cin>>num;
    if(num<0)                              //小于0时停止输入
    {
      return;
    }
    q=new node;
    q->data=num;
    q->next=p;                 //新节点q的指针变成旧节点,next指向前一个节点的地址,从后往前存储数据
    p=q;                       //新节点q现在变成首节点,下一次从当前节点开始
    input();
}

int main()
{
    cout<<"Enter data until data<0:"<<endl;
    p=NULL;
    input();
    head=p;                             //使p作为头结点,再遍历输出,因为是用p的名义链接的链表
    cout<<"Output"<<endl;
    while(p!=NULL)
    {
        cout<<p->data<<endl;
        p=p->next;
    }
    return 0;
}

怕自己下次就看不懂,记录比较详细(哭笑),希望考试前别又忘了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值