设为首页 加入收藏

TOP

链表的反转
2014-11-23 22:19:17 来源: 作者: 【 】 浏览:2
Tags:反转

(1)链表的反转

原先的链表保留一个头结点head,通过该头结点可以遍历链表的每一个结点里内容,如果在链表遍历的过程中,再用两个指针把把链表里的内容指针的指向改变,使原先指向下一个节点的,改为指向它的前一个节点,就可以实现链表的反转了!

#include

#include

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;

for(i=1;i

{

ptr1=(llink)malloc(sizeof(node));

if(!ptr1)

return NULL;

ptr1->num=array[i];

ptr->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()

{

int llist[6]={1,2,3,4,5,6};

llink head;

head=createllist(llist ,6);

if(!head)

{

exit(1);

}

printllist(head);

head=invertllist(head);

printllist(head);

printllist(head);

return 0;

}

分享到:

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言求任意四边形面积和其关联的.. 下一篇问题九十七:Reverse Number

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: