构建一个链表以后,从第一个点开始,逐渐改变他和后面的点的指针。并且要加一个辅助点来记住改变指针的点后的点。这里要注意的是记住将第一个点的next变成空,将head的next变成最后一个顶点。
#include <iostream>
#include<cstdio>
#include<malloc.h>
#include<cstring>
using namespace std;
typedef struct LNode
{
int data;
struct LNode * next;
}LNode,*LinkList;
void CreateList(LNode *head,int n)
{
head->next=NULL;
int temp;
printf("请逆序输入链表结点:\n");
for(int i=0;i<n;i++)
{
LNode *q=(LNode*)malloc(sizeof(LNode));
scanf("%d",&temp);
q->data=temp;
q->next=head->next;
head->next=q;
}
}
void Inverse(LNode *head)
{
LNode *p=head->next;
LNode *q=p->next;
LNode *temp=q->next;
p->next=NULL;
while(q->next!=NULL)
{
q->next=p;
p=q;
q=temp;
temp=q->next;
}
q->next=p;
head->next=q;
}
void PrintList(LNode *p)
{
printf("输出链表:\n");
p=p->next;
printf("%d",p->data);
p=p->next;
while(p->next!=NULL)
{
printf("->%d",p->data);
p=p->next;
}
printf("->%d\n",p->data);
}
int main()
{
printf("请输入链表结点个数:");
int n;
scanf("%d",&n);
LNode *head=(LNode*)malloc(sizeof(LNode));
CreateList(head,n);
PrintList(head);
Inverse(head);
PrintList(head);
return 0;
}