C语言,将链表逆置。

来源:百度知道 编辑:UC知道 时间:2024/09/27 13:17:55
#include<iostream.h>
struct node
{
long num;
node *next;
};
node *head;
node *create()
{
node *p;
node *pend;
p=new node;
cin>>p->num;
head=NULL;
pend=p;
while(p->num!=0)
{
if(head=NULL)
head=p;
else
pend->next=p;
pend=p;
p=new node;
cin>>p->num;
}
pend->next=NULL;
delete p;
return (head);
}
node *reverse(node *head)
{
node *p1,*p2,*p3;
p1=head;
p3=p1;
p2=p3->next;
while(p1->next!=NULL)
{
while(p2->next!=NULL)
{
p2=p2->next;
p3=p3->next;
}
p2->next=p1->next;
p1->next=p2;
p3->next=NULL;
p1=p1->next;
p3=p1;
p2=p3->next;
}
return(head);
}
void showlist(node *head)
{
while(head)
{
cout<<head

head你定义的是全局,所以creae可以这么改
void create()
{
node *p;
node *pend=NULL;
p=new node();
cin>>p->num;
head=NULL;
//pend=p;
while(p->num!=0)
{
if(head==NULL)
head=p;
//else
if(pend==NULL)
pend=p;
pend->next=p;
cin>>p->num;
}
pend->next=NULL;
delete p;

}
注意你里面针对头和尾的处理。
另外判断相等是==
在showlist里,完全可以不传参数,由于你head是全局,所以最好不要在这个函数里修改
void showlist(node *head)
转置的话p1,p2,temp;
开始p1=null,p2=head temp=p2.next;
p2.next=p1,p1=p2,p2=temp;

{
node *temp=head;
cout<<"ri"<<endl;
while(temp!=NULL)
{
cout<<temp->num<<",";
temp=temp->next;
}