#include <stdio.h>
#include <stdlib.h>
typedef struct LNode{
int data;
struct LNode *next;
int e;
}LNode, *LinkList;
#include <stdlib.h>
typedef struct LNode{
int data;
struct LNode *next;
int e;
}LNode, *LinkList;
void CreateList(LinkList *L,int n)
{
int i;
LinkList p,q;
*L=(LinkList)malloc(sizeof(struct LNode));
(*L)->next=NULL;
q=*L;
printf("请输入%d个数据\n",n);
for(i=1;i<=n;i++)
{
p=(LinkList)malloc(sizeof(struct LNode));
scanf("%d",&p->data);
q->next=p;
q=q->next;
}
p->next=NULL;
}
{
int i;
LinkList p,q;
*L=(LinkList)malloc(sizeof(struct LNode));
(*L)->next=NULL;
q=*L;
printf("请输入%d个数据\n",n);
for(i=1;i<=n;i++)
{
p=(LinkList)malloc(sizeof(struct LNode));
scanf("%d",&p->data);
q->next=p;
q=q->next;
}
p->next=NULL;
}
int main(){
int length = 0;
printf("请输入链表长度:\n");
scanf("%d", &length);
LinkList L;
CreateList(&L, length);
int i = 0;
LNode *first = L;
printf("操作前的链表:\n");
for(; i < length; i++){
first = first->next;
printf("%d ", first->data);
}
printf("\n");
//链表逆置
LinkList temp, p, q;
q = L->next;
temp=q->next;
for(i = 1; i < length; i++)
{
if(temp->next != NULL)
{
//当链表中还有至少三个结点没有逆置时
p = temp;
temp = p->next;
p->next = q;
q = p;
}
else
{
// 当链表中只有两个结点没有逆置时
temp->next=q;
q=temp;
}
}
L->next = q;//吧头指针的next指向逆置后的第一个元素
//输出逆置后的链表元素
q = L->next;
i=1;
printf("逆置后的链表元素的序列:\n");
while(i <= length) //按序输出链表元素
{
int length = 0;
printf("请输入链表长度:\n");
scanf("%d", &length);
LinkList L;
CreateList(&L, length);
int i = 0;
LNode *first = L;
printf("操作前的链表:\n");
for(; i < length; i++){
first = first->next;
printf("%d ", first->data);
}
printf("\n");
//链表逆置
LinkList temp, p, q;
q = L->next;
temp=q->next;
for(i = 1; i < length; i++)
{
if(temp->next != NULL)
{
//当链表中还有至少三个结点没有逆置时
p = temp;
temp = p->next;
p->next = q;
q = p;
}
else
{
// 当链表中只有两个结点没有逆置时
temp->next=q;
q=temp;
}
}
L->next = q;//吧头指针的next指向逆置后的第一个元素
//输出逆置后的链表元素
q = L->next;
i=1;
printf("逆置后的链表元素的序列:\n");
while(i <= length) //按序输出链表元素
{
printf("%d ",q->data);
q = q->next;
i++;
}
printf("\n");
q = q->next;
i++;
}
printf("\n");
}