代码如下:
#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; // mid是head的前结点
while (head != NULL)
{
last = mid; // last是mid的前结点
mid = head;
head = head -> next; // 下一个结点
mid -> next = last; // mid指向前结点last
}
return mid;
}
int main( int argc, char * argv[])
{
int llist[ 6 ] = { 1 , 2 , 3 , 4 , 5 , 6 };
llink head;
head = createllist(llist, 6 );
if ( ! head)
{
printf( " 内存分配失败!\n " );
exit( 1 );
}
printf( " 原来的链表: " );
printllist(head);
head = invertllist(head);
printf( " 反转后链表: " );
printllist(head);
system( " PAUSE " );
return 0 ;
}
#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; // mid是head的前结点
while (head != NULL)
{
last = mid; // last是mid的前结点
mid = head;
head = head -> next; // 下一个结点
mid -> next = last; // mid指向前结点last
}
return mid;
}
int main( int argc, char * argv[])
{
int llist[ 6 ] = { 1 , 2 , 3 , 4 , 5 , 6 };
llink head;
head = createllist(llist, 6 );
if ( ! head)
{
printf( " 内存分配失败!\n " );
exit( 1 );
}
printf( " 原来的链表: " );
printllist(head);
head = invertllist(head);
printf( " 反转后链表: " );
printllist(head);
system( " PAUSE " );
return 0 ;
}