网新恒天笔试题,有一个整型的单向链表A,请编程将其倒序。
代码如下:
#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;
}
合乎自然而生生不息。。。