代码实现:
#include<bits/stdc++.h>
using namespace std;
struct node
{
int data;
struct node *next;
};
struct node *creat()///首先是顺序建立链表。
{
struct node *head,*p,*tail;
head=(struct node *)malloc(sizeof(struct node));
head->next=NULL;
tail=head;
int t;
while(~scanf("%d",&t)&&t!=-1)
{
p=(struct node *)malloc(sizeof(struct node));
p->data=t;
p->next=NULL;
tail->next=p;
tail=p;
}
return head;
}
void change(struct node *head)///其次是对建立完的链表进行逆置
{
struct node *p,*q;
p=head->next;
head->next=NULL;///将头节点与后面的节点分离,然后构造新链表
q=p->next;//保存指向他的地址号
while(p)///当p不为空时将p节点插入head后面,相当于逆序建立链表。
{
p->next=head->next;
head->next=p;
p=q;
if(q)
q=p->next;
}
}
void display(struct node *head) ///遍历链表
{
struct node *q;
q=head->next;
while(q)
{
if(q->next!=NULL)
{
printf("%d ",q->data);
}
else
{
printf("%d\n",q->data);
}
q=q->next;
}
}
int main()
{
struct node *head;
head=creat();
change(head);
display(head);
return 0;
}