|
code:
#include <stdio.h>
#include <stdlib.h>
struct llist {
int num;
struct llist *next;
};
typedef struct llist node;
typedef node *llink;
/*-----------*/
/* 链表输出 */
/*-----------*/
void printllist(llink ptr)
{
while (ptr != NULL) {
printf("[%d]", ptr->num);
ptr = ptr->next;
}
printf("\n");
}
/*-----------*/
/* 链表创建 */
/*-----------*/
llink createllist(int *array, int len)
{
llink head; /*链表开始指针*/
llink ptr, ptr1;
int i;
/*创建第一个结点*/
head = (llink) malloc(sizeof(node));
if (!head) /*检查指针*/
return NULL;
head->num = array[0]; /*创建结点内容*/
head->next = NULL; /*设置指针初值*/
ptr = head; /*ptr指向链表开始*/
for (i = 1; i < len; i++) { /*创建其它结点循环*/
ptr1 = (llink)malloc(sizeof(node));
if (!ptr1)
return NULL;
ptr1->num = array[i]; /*创建结点内容*/
ptr1->next = NULL; /*设置指针初值*/
ptr->next = ptr1; /*连接结点*/
ptr = ptr->next; /*指向下一结点*/
}
return head;
}
/*-----------*/
/*链表的反转 */
/*-----------*/
llink invertllist(llink head)
{
llink mid, last;
mid = NULL;
while ( head != NULL ) {
last = mid;
mid = head;
head = head->next;
mid->next = last;
}
return mid;
}
/*-------------*/
/*链表内存释放 */
/*-------------*/
void freellist(llink head)
{
llink ptr;
while( head != NULL) {
ptr = head;
head = head->next;
free(ptr);
}
}
int main(void)
{
int llist1[6] = {1, 2, 3, 4, 5, 6}; /*数组内容*/
llink head; /*指向链表开始*/
head = createllist(llist1, 6);
if (!head) {
printf("内存分配失败! \n");
exit(1);
}
printf("原来的链表: ");
printllist(head);
head = invertllist(head);
printf("反转后的链表: ");
printllist(head);
freellist(head);
} |
|