
#include <stdio.h>
#include <malloc.h>
#define MAX_LEN 10
typedef struct _LINKNODE
{
int value;
struct _LINKNODE* next;
}LINKNODE;
void copyLink(LINKNODE** destLink, LINKNODE* sourceLink)
{
if(sourceLink == NULL)
{
destLink = NULL;
return;
}
int count = 0;
LINKNODE* tempSource = sourceLink;
LINKNODE* curNode = NULL;
LINKNODE* temp = NULL;
while(count < MAX_LEN)
{
curNode = (LINKNODE*)malloc(sizeof(LINKNODE));
curNode->value = tempSource->value;
if(*destLink == NULL)
{
*destLink = curNode;
temp = *destLink;
}
else
{
temp ->next = curNode;
temp = temp ->next;
}
tempSource = tempSource->next;
count++;
}
temp->next = sourceLink;
}
LINKNODE* revertLink(LINKNODE* sourceLink)
{
LINKNODE* result = NULL;
if(sourceLink != NULL)
{
int count = 0;
LINKNODE* temp = NULL;
while(count++ < MAX_LEN)
{
temp = sourceLink->next;
sourceLink->next = result;
result = sourceLink;
sourceLink = temp;
}
}
return result;
}
void freeLink(LINKNODE* head)
{
int count = 0;
LINKNODE* temp = NULL;
if(head != NULL)
{
while(count++ < MAX_LEN)
{
temp = head;
head = head->next;
free(temp);
}
head = NULL;
}
}
void main()
{
int value[MAX_LEN] = {2, 4, 5, 6, 7, 8, 9, 0, 6, 1};
LINKNODE* head = NULL;
LINKNODE* curNode = NULL;
LINKNODE* copyLink1 = NULL;
LINKNODE* tempCur = NULL;
for(int i=0; i<MAX_LEN; i++)
{
curNode = (LINKNODE*)malloc(sizeof(LINKNODE));
curNode->value = value[i];
curNode->next = NULL;
if(head == NULL)
{
head = curNode;
tempCur = head;
}
else
{
tempCur->next = curNode;
tempCur = tempCur->next;
}
}
tempCur->next = head;
copyLink(©Link1, head);
tempCur = copyLink1;
i = 0;
printf("新的复制后的链表是: ");
while(i < MAX_LEN)
{
printf(" %d ", tempCur->value);
tempCur = tempCur->next;
i++;
}
printf("\n");
head = revertLink(head);
tempCur = head;
printf("逆置后的链表是: ");
i = 0;
while(i < MAX_LEN)
{
printf(" %d ", tempCur->value);
tempCur = tempCur->next;
i++;
}
printf("\n");
freeLink(copyLink1);
freeLink(head);
}
#include <malloc.h>
#define MAX_LEN 10
typedef struct _LINKNODE
{
int value;
struct _LINKNODE* next;
}LINKNODE;
void copyLink(LINKNODE** destLink, LINKNODE* sourceLink)
{
if(sourceLink == NULL)
{
destLink = NULL;
return;
}
int count = 0;
LINKNODE* tempSource = sourceLink;
LINKNODE* curNode = NULL;
LINKNODE* temp = NULL;
while(count < MAX_LEN)
{
curNode = (LINKNODE*)malloc(sizeof(LINKNODE));
curNode->value = tempSource->value;
if(*destLink == NULL)
{
*destLink = curNode;
temp = *destLink;
}
else
{
temp ->next = curNode;
temp = temp ->next;
}
tempSource = tempSource->next;
count++;
}
temp->next = sourceLink;
}
LINKNODE* revertLink(LINKNODE* sourceLink)
{
LINKNODE* result = NULL;
if(sourceLink != NULL)
{
int count = 0;
LINKNODE* temp = NULL;
while(count++ < MAX_LEN)
{
temp = sourceLink->next;
sourceLink->next = result;
result = sourceLink;
sourceLink = temp;
}
}
return result;
}
void freeLink(LINKNODE* head)
{
int count = 0;
LINKNODE* temp = NULL;
if(head != NULL)
{
while(count++ < MAX_LEN)
{
temp = head;
head = head->next;
free(temp);
}
head = NULL;
}
}
void main()
{
int value[MAX_LEN] = {2, 4, 5, 6, 7, 8, 9, 0, 6, 1};
LINKNODE* head = NULL;
LINKNODE* curNode = NULL;
LINKNODE* copyLink1 = NULL;
LINKNODE* tempCur = NULL;
for(int i=0; i<MAX_LEN; i++)
{
curNode = (LINKNODE*)malloc(sizeof(LINKNODE));
curNode->value = value[i];
curNode->next = NULL;
if(head == NULL)
{
head = curNode;
tempCur = head;
}
else
{
tempCur->next = curNode;
tempCur = tempCur->next;
}
}
tempCur->next = head;
copyLink(©Link1, head);
tempCur = copyLink1;
i = 0;
printf("新的复制后的链表是: ");
while(i < MAX_LEN)
{
printf(" %d ", tempCur->value);
tempCur = tempCur->next;
i++;
}
printf("\n");
head = revertLink(head);
tempCur = head;
printf("逆置后的链表是: ");
i = 0;
while(i < MAX_LEN)
{
printf(" %d ", tempCur->value);
tempCur = tempCur->next;
i++;
}
printf("\n");
freeLink(copyLink1);
freeLink(head);
}