65,211
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#define MAX 10
typedef struct List
{
int Number;
int Total;
struct List *Next;
}*Link;
int Data[2][MAX] =
{ 1, 3, 5, 7, 2, 4, 6, 8, 9, 10,
15,35,10,67,25,65,38,70,30,20,
};
Link Create_List(Link Head);
void Print_List(Link Head);
Link Invert_List(Link Head);
Link Reverse_List(Link Head);
void Free_List(Link Head);
int main(int argc, char *argv[])
{
Link Head = NULL;
Head = Create_List(Head);
if(NULL!=Head)
{
printf("Input Data : \n");
Print_List(Head);
Head = Invert_List(Head);
printf("After Invert1 : \n");
Print_List(Head);
Head = Reverse_List(Head);
printf("After Invert2 : \n");
Print_List(Head);
Free_List(Head);
}
return 0;
}
Link Create_List(Link Head)
{
Head = malloc(sizeof(*Head));
if(NULL==Head)
{
printf("Memory allocate Failure!\n");
}
else
{
Link Pointer;
int i;
Head->Number = Data[0][0];
Head->Total = Data[1][0];
Head->Next = NULL;
Pointer = Head;
for(i=1; i<MAX; ++i)
{
Link New = malloc(sizeof(*New));
if(New)
{
New->Number = Data[0][i];
New->Total= Data[1][i];
New->Next = NULL;
Pointer->Next = New;
Pointer = New;
}
else
{
printf("Memory allocate Failure!\n");
break;
}
}
}
return Head;
}
void Print_List(Link Head)
{
while(NULL!=Head)
{
printf("[%2d,%d] ", Head->Number, Head->Total);
Head = Head->Next;
}
putchar('\n');
}
Link Invert_List(Link Head)
{
Link Pointer;
Link Back;
Link Next;
if(Head==NULL || Head->Next==NULL) //节点为空或只有一个节点
{
return Head;
}
else if(Head->Next->Next==NULL) //只有二个节点
{
Back = Head;
Pointer = Back->Next;
Back->Next = NULL;
}
else
{
Back = Head;
Pointer = Back->Next;
Back->Next = NULL;
Next = Pointer->Next;
Pointer->Next = Back;
Back = Pointer;
Pointer = Next;
while(NULL!=Pointer->Next)
{
Next = Pointer->Next;
Pointer->Next = Back;
Back = Pointer;
Pointer = Next;
}
}
Pointer->Next = Back;
Head = Pointer;
return Head;
}
Link Reverse_List(Link Head) //更简洁的方法
{
if(NULL==Head || Head->Next==NULL)
return Head;
else
{
Link pointer = Head;
Head = Head->Next;
pointer->Next = NULL;
while(Head!=NULL)
{
Link tem = Head->Next;
Head->Next = pointer;
pointer = Head;
Head = tem;
}
return pointer;
}
}
void Free_List(Link Head)
{
Link Pointer;
while(NULL!=Head)
{
Pointer = Head;
Head = Head->Next;
free(Pointer);
}
}