` 有几个需要注意的地方
- 为链表赋值不要用头插法,头插法先插入的结点后输出,不用你去逆置,输出的时候就会逆序输出了
- 遍历输出链表结点不要用移动头指针去遍历,应为头指针有定位链表作用,应该另外设置一个指针去遍历
- List item
#include<stdio.h>
#include<stdlib.h>
#define ERROR 0;
#define OK 1;
typedef int ElemType;
typedef int Status;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,LinkList;
//创建空链表,由于链表所占用的空间可以不连续,可以不用判断是否分配成功
Status InitLinkList(LinkList &L)
{
//生成一个新节点作为头结点,头指针指向头结点,头结点指针域置空
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
return OK;
}
//给链表各元素赋值,即生成新结点
Status assign(LinkList &L,int n)
{
int i,e;
LinkList u=L;
for(i=0;i<n;i++)
{
//创建一个结点,让s指向它,注意是用尾插法,用头插法相当于在赋值的过程中逆置了
LNode s=(LinkList)malloc(sizeof(LNode));
printf(“请输入元素值”);
scanf("%d",&e);
s->data=e;
//插入到新结点后面
s->next=NULL;
u->next=s;
u=s;
}
return OK;
}
//逆置算法
Status reverse(LinkList &L)
{
LinkList p,q;
p=L;
p=p->next;
L->next=NULL;
//将结点依次插到头结点后面
while(p!=NULL)
{
q=p;
p=p->next;
q->next=L->next;
L->next=q;
}
LinkList t=L->next;
for(int i=0;i<5;i++)
{
printf("%d",t->data);
printf("\n");
t=t->next;
}
return OK;
}
int main()
{
LinkList L1;
InitLinkList(L1);
int m;
printf(“链表元素个数为”);
scanf("%d",&m);
assign(L1,m);
reverse(L1);
}