头插法
#include<stdio.h>
#include<malloc.h>
#include <stdlib.h>
#define error -1;
#define OK 1;
typedef int ElemType;
typedef int status;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode, *LinkList;
LinkList creat()
{//使用尾插法建立带头结点的单链表;
LinkList L;
L = (LinkList)malloc(sizeof(LNode)); //开辟头结点空间
if(!L) printf("memory malloc error!\n");
LinkList p = L;
ElemType a;
int len;
printf("请输入待建表的表长:");
scanf("%d", &len);
if(len>0)
{
for(int i=0; i<len; i++)
{
printf("请输入第%d个元素的值:", i+1);
scanf("%d", &a);
p->next = (LinkList)malloc(sizeof(LNode));
p->next->data = a;
p = p->next;
}
}
p->next = NULL;
return L;
}
void print(LinkList L)
{
LinkList p = L ->next;
while(p != NULL)
{
printf("%d\n", p->data);
p = p->next;
}
}
void reverse(LinkList L)
{//对带头结点的单链表L实现就地逆置
//将头结点和表中第一个结点断开,构造一个空表,
//再将表中剩余结点以头插法的方式插入新表中
if(L->next != NULL)
{
LinkList p = L->next;
LinkList q;
L->next = NULL;
while(p != NULL)
{
q = p->next;
p->next = L->next;
L->next = p;
p = q;
}
}
}
int main()
{
LinkList L = creat();
reverse(L);
print(L);
return 0;
}