建立链表时的简单问题

来源:百度知道 编辑:UC知道 时间:2024/05/25 00:20:05
链表上结点的数据结构:
struct node {
int data;
node * next;
}
建立无序链表的函数
node * create()
{
int a;
node *p1,*p2,*head;
head=0;
cout<<"产生一条无序链表,请输入数据以-1结束:";
cin>>a;
while(a!=-1){
p1=new node;
p1->data=a;
if(head==0){
head=p1;p2=p1;
}
else{
p2->next=p1;p2=p1;
}
cin>>a;
}
if(head)p2->next=0;
return(head);
}
第一个if循环语句里面的具体意思时什么啊,我不懂啊,就是head=p1;p2=p1和p2->next=p1;p2=p1;这两句
第二个if(head)里面怎么判断head啊?不懂,我菜菜,高手耐心指导一下啊

node * create()
{
int a;
node *p1,*p2,*head;
head=0;
cout<<"产生一条无序链表,请输入数据以-1结束:";
cin>>a;
while(a!=-1){
p1=new node;
p1->data=a;
if(head==0){
head=p1;p2=p1; //如果链表的头结点head为空,则把P1的首地址给head
} //再让P2指向P1。
else{
p2->next=p1;p2=p1; //否则,把P1的首地址给P2的指针域,然后让P2指向P1。
}
cin>>a;
}
if(head)p2->next=0; //如果head不为空,则这个条件为真,否则这个条件为假
return(head);
}

head是链表的头指针,P1是要插入的结点,P2是链表的尾指针,你模拟计算机执行一下这个程序,把链表建起来就好理解了。

if(head==0){
head=p1;p2=p1;
}
如果头地址为空,将p1的地址赋值给head(以后head就不变了),p2是以后会使用的变量,将p1的值赋值给p2

p2->next=p1;p2=p1; 如果不为空,则将p1的指针接到p2的尾部(next),然后p2再向后移动到p1的位置

if(head==0){ //这应该是一个不带头结点的链表,head==0应该是说head这个指针不指向任何东西,也就是链表不存在
head=p1;p2=p1; //p1所指的是新的结点,这句的作用就是让head,p1,p2都指向新的结点,head是头指针,这样就有了一个只有一个结点的链表了
}

if(head)就是说当head这个东东存在时,再做下面;

QQ:285846122