#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct
{
int elem[MAXSIZE];
int length;
}SeqList;
typedef struct Node
{
int elem;
struct Node* p;
}LList;
LList* InitHead()
{
LList* headnode = (LList*)malloc(sizeof(LList));
//if(headnode == NULL) exit(0);
headnode->p=NULL;
return headnode;
}
LList* createNode(int data)
{
LList* NewNode = (LList*)malloc(sizeof(LList));
// if(NewNode== NULL) exit(0);
NewNode->elem = data;
NewNode->p = NULL;
return NewNode;
}
void printlist(LList *L)
{
LList *r= L;
while(r->p !=NULL)
{
r = r->p;
printf("%d ",r->elem);
}
}
void reverseLinkedList(LList *L)
{
LList *next,*prior; //记录前后节点
next= L->p;
L ->p = NULL; //断开指针头 头插法
while(next)
{
prior = next;
next = next ->p ;
prior ->p = L->p;
L->p = prior;
}
return ;
}
int N[MAXSIZE]={0};
int main()
{
//以一维数组作存储结构
SeqList s;
scanf("%d",&s.length);
for(int i=0;i<s.length;i++)
scanf("%d",&N[i]);
for(int i=0;i<s.length;i++)
{
s.elem[i]=N[i];
}
//数组逆序
for(int i=0;i<(s.length)/2;i++)
{
int t=s.elem[i];
s.elem[i]=s.elem[s.length-i-1];
s.elem[s.length-i-1] = t;
}
for(int i=0;i<s.length;i++)
{
printf("%d ",s.elem[i]);
}
printf("\n");
//以单链表作为存储结构
LList* L=InitHead();
LList *r = L;
for(int i =0 ; i<s.length; i++)
{
LList *n = (LList*)malloc(sizeof(LList));
r->p = n;
r = r->p;
n->elem = N[i]; //读入数据。
n->p = NULL;
}
reverseLinkedList(L);
printlist(L);
return 0;
}
数据结构理论课noj(2) 线性表的就地逆置
于 2022-03-27 10:34:57 首次发布