博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
链表结构的反转(5)
阅读量:6650 次
发布时间:2019-06-25

本文共 1802 字,大约阅读时间需要 6 分钟。

  hot3.png

链表结构反转的思想:

    将一个链表分为3部分,head(头部分),mid(中间部分),last(最后部分);

    反转前的顺序:head->mid->last;

    反转后的顺序:last->mid->head;

    因此,将last向head方向移动,head向last方向移动,最终使mid成为head的前结点,last成为mid的前结点。

    llink  inverllist(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;
 }

举例如下,

 

链表的反转
 
#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;
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 inverllist(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)
{
printf(
" 内存分配失败! \n " );
exit(
1 );
}
printf(
" 原来的链表: " );
printllist(head);
head
= inverllist(head);
printf(
" 反转后链表: " );
printllist(head);
freellist(head);
}

 

 

    

转载于:https://my.oschina.net/garyun/blog/602816

你可能感兴趣的文章
元素大小与获取各种高度 宽度 距离总结
查看>>
小程序开发经验:多页面数据同步
查看>>
http重要知识点
查看>>
onlyoffice/documentserver中文乱码
查看>>
安卓机器怎么样不root激活xposed框架的步骤
查看>>
第三天-《企业应用架构模式》-映射到关系数据库
查看>>
Electron 在线热升级方案
查看>>
Eclipse Memory Analyzer入门教程
查看>>
如何将springmvc项目转为springboot
查看>>
node fs文件操作
查看>>
服务器部署2 - nginx
查看>>
给妹子讲python-S01E24深入解析异常处理方式
查看>>
深入作用域
查看>>
centos java环境安装
查看>>
JavaScript基础—数据类型
查看>>
CSS单位em和rem
查看>>
实时计算轻松上手,阿里云DataWorks Stream Studio正式发布
查看>>
“公众号+小程序+直播”形成流量闭环,抓住机会就是血赚!
查看>>
为什么我们决定重构 Uber 司机端
查看>>
阿里云证书服务使用教程
查看>>