指针所指向的数据作为函数的输出参数时出现的问题,不知道怎么解释
icais 2005-10-15 02:07:54 具体代码为:
#include <iostream.h>
struct node
{
int data;
node *next;
};
node *Create(void ) //产生一条无序链表
{
node *p1, *p2 ,*head;
int a;
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;
}
p2->next = 0;
return (head);
}
void Print(const node *head) //输出链表上各结点的数据
{
const node *p;
p = head ;
cout <<"链表上各结点的数据为:\n";
while ( p != 0 )
{
cout <<p->data << '\t';
p= p->next;
}
cout <<"\n";
}
void reverse(node *head)//链表转置
{
node *p1=head,*p2,*p3;
p2=p3=NULL;
while(p2=p1->next)
{
p1->next=p3;
p3=p1;
p1=p2;
}
p1->next=p3;
head=p1;
}
void main(void )
{
node *head ;
head = Create(); //产生一条无序链表
Print(head); //输出链表上的各结点值
reverse(head);//此行出错,只能输出原链表的第一个元素
Print(head);
deletechain(head); //释放链表上各结点占用的内存空间
}
如果将reverse函数改为:
node* reverse(node *head)//转置
{
node *p1=head,*p2,*p3;
p2=p3=NULL;
while(p2=p1->next)
{
p1->next=p3;
p3=p1;
p1=p2;
}
p1->next=p3;
return p1;
}
然后
void main(void )
{
node *head ;
head = Create(); //产生一条无序链表
Print(head); //输出链表上的各结点值
node *p=reverse(head);//此行出错,只能输出原链表的第一个元素
Print(p);
deletechain(head); //释放链表上各结点占用的内存空间
}
则能结果正常。
请问,为什么用指针所指向的数据作为函数的输出参数时会出现的问题?请指教。