题目:递归创建链表,从键盘上顺序输入整数,直到输入的整数小于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;
}
怕自己下次就看不懂,记录比较详细(哭笑),希望考试前别又忘了。
1万+

被折叠的 条评论
为什么被折叠?



