//第一种,使用后添数据的方式创建一个新链表
#include <stdio.h>
#include <malloc.h>
typedef struct Node
{
int data;
struct Node *next;
}LIST, *LINKLIST;
/*创建链表*/
LINKLIST createList(int size)
{
int i = 0;
LINKLIST head = NULL;
LINKLIST cursor = NULL;
LINKLIST node = NULL;
cursor = head = node = (LINKLIST)malloc(sizeof(LIST));
node->next = NULL;
while (i < size)
{
node = (LINKLIST)malloc(sizeof(LIST));
printf("input data:");
scanf("%d", &node->data);
cursor->next = node;
cursor = node;
i++;
}
cursor->next = NULL;
return head;
}
/*显示链表数据*/
void showData(LINKLIST list)
{
LINKLIST cursor = list->next;
while (cursor != NULL)
{
printf("%d\t", cursor->data);
cursor = cursor->next;
}
}
/*逆置(使用后添数据的方式创建一个新链表)*/
LINKLIST invert(LINKLIST list)
{
LINKLIST node = (LINKLIST)malloc(sizeof(LIST));
LINKLIST p = NULL;
LINKLIST head = list->next;
node->next = NULL;
while (head != NULL)
{
p = node->next;
node->next = head;
head = head->next;
node->next->next = p;
}
free(list);
return node;
}
int main(void)
{
int size = 0;
LINKLIST list = NULL;
printf("input linklist size:");
scanf("%d", &size);
list = createList(size);
printf("The original data:\n");
showData(list);
printf("\n");
showData(invert(list));
getch();
return 0;
}
//第二种,把第二元素的next指针指向第一个元素,第三个元素的next指针指向第二个元素.......最后一个被头指针指向
#include <stdio.h>
#include <malloc.h>
typedef struct Node
{
int data;
struct Node *next;
}LIST, *LINKLIST;
/*创建链表*/
LINKLIST createList(int size)
{
int i = 0;
LINKLIST head = NULL;
LINKLIST cursor = NULL;
LINKLIST node = NULL;
cursor = head = node = (LINKLIST)malloc(sizeof(LIST));
node->next = NULL;
while (i < size)
{
node = (LINKLIST)malloc(sizeof(LIST));
printf("input data:");
scanf("%d", &node->data);
cursor->next = node;
cursor = node;
i++;
}
cursor->next = NULL;
return head;
}
/*显示链表数据*/
void showData(LINKLIST list)
{
LINKLIST cursor = list->next;
while (cursor != NULL)
{
printf("%d\t", cursor->data);
cursor = cursor->next;
}
}
/*逆置*/
void invert(LINKLIST list)
{
LINKLIST first = list->next;
LINKLIST two = first->next;
LINKLIST cursor = NULL;
LINKLIST head = first;
while (two != NULL)
{
cursor = two->next;
two->next = first;
first = two;
two = cursor;
}
head->next = NULL;
list->next = first;
}
int main(void)
{
int size = 0;
LINKLIST list = NULL;
printf("input linklist size:");
scanf("%d", &size);
list = createList(size);
printf("The original data:\n");
showData(list);
printf("\n");
invert(list);
printf("result is:\n");
showData(list);
getch();
return 0;
}