/* 链表结构的反转 */
#include "stdio.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,ptr,ptr1;
int i;
head=(llink)malloc(sizeof(node));
if(!head) return NULL;
head->num=array[0];
head->next=NULL;
ptr=head;
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)/*mid是head的前结点*/
{
last=mid; /*last是mid的前节点*/
mid=head;
head=head->next;/*下一个节点*/
mid->next=last;/*mid指向前节点last*/
}
return mid;
}
/*链表的内存释放*/
void freellist(llink head)
{
llink ptr;
while(head!=NULL)
{
ptr=head;
head=head->next;
free(ptr);
}
}
void main()
{
int llist1[6]={1,2,3,4,5,6};
llink head;
head=createllist(llist1,6);
if(!head)
{
printf("内存分配失败!");
exit(1);
}
printf("原来的链表:");
printllist(head);
head=invertllist(head);
printf("反转后的链表:");
printllist(head);
freellist(head);
}
链表结构的反转
最新推荐文章于 2020-02-12 10:25:05 发布