首先看个不完整的代码
#include<iostream>
using namespace std;
class book
{
  public:
  int num;
  float price;
  book *next;
};
book *head=NULL;
book* creat()
{
  book *p1;
  book *p2;
  p1=new book;
  head=p1;
  p2=p1;
  cout<<"请输入图书的编号,以0 结束"<<endl;                                                 
  cin>>p1->num;
  if(p1->num!=0)
  {
    cout<<"请输入图书的价格"<<endl;
    cin>>p1->price;
  }
  else
  {
    delete p1;p2=NULL;head=NULL;return head;
  }
  while(p1->num!=0)
  {
    p2=p1;
    p1=new book;
    cout<<"请输入图书的编号,以0 结束"<<endl;
    cin>>p1->num;
    if(p1->num!=0)
    {
      cout<<"请输入图书的价格"<<endl;
      cin>>p1->price;
    } 
    p2->next=p1;
  }
  delete p1;
  p2->next=NULL;
  return head;
}
int main()
{
  creat();
  return 0;
}


while(p1->num!=0)
  {
    p2=p1;
    p1=new book;
    cout<<"请输入图书的编号,以0 结束"<<endl;
    cin>>p1->num;
    if(p1->num!=0)
    {
      cout<<"请输入图书的价格"<<endl;
      cin>>p1->price;
    } 
    p2->next=p1;
  }
p2=p1多次循环以后p1和p2所保存的数据会被修改吧?
p2->next=p1;
p1指向开辟的第二个空间了,把p1的值赋值给p2的next,使得p2可以用过next访问后继节点p1。
我想问问经过多次循环以后p2->next不会被覆盖么?
p2=p1
p2就是旧的结点,p1又开辟了新空间然后指向。
p2->next=p1旧的结点的next指针,指向新结点。
这次循环输入的数据,不会覆盖上一次输入的数据么?
我就搞不懂 P2=P1
然后P1开辟新空间
p2->next=p1旧的结点的next指针,指向新结点连接。
我就搞不懂循环多次以后p1p2吧上一次或者上上次的数据保存到哪里去了,都是用p2=p1,然后p1在开辟,我理解是那么P1 P2原先的数据不会被修改。就搞不懂这。
p1开辟新空间然后p2保存 那么 p2 p1上次保存的数据不会被这次保存的数据覆盖?