将链表指针逆向,从而产生一个逆向链表。
#include<stdio.h>
#include<stdlib.h>
#define N 5
typedef struct stu
{
int num;
struct stu *link;
}Lnode,*LinkList;
void invert(LinkList &list) //链表逆转
{
LinkList p,q,r;
p=list;
q=NULL;
while(p!=NULL)
{
r=q;
q=p;
p=p->link;
q->link=r;
}
list=q;
}
void input(LinkList &list)
{
LinkList p=list;
while(p!=NULL)
{
printf("%d ",p->num);
p=p->link; //指向下一个节点
}
printf("\n");
}
int main()
{
LinkList p,r,list=NULL;
for(int i=0;i<N;i++)
{
p=(LinkList)malloc(sizeof(Lnode)); //创建节点空间
printf("请输入数据:\n",(i+1));
scanf("%d",&p->num);
p->link=NULL;
if(list==NULL)
{
list=p; //若初始(第一个)节点为空,则让p指向它,否则指向下一个
}else{
r->link=p;
}
r=p;
}
input(list);
invert(list);
input(list);
return 0;
}