单链表的逆序输出及就地逆置
来源:互联网 发布:彩虹控制软件 编辑:程序博客网 时间:2024/06/06 13:57
单链表的逆序输出:
void R_Print(LinkList L){ if(L->next) R_print(L->next); print(L->data);}
单链表的就地逆置:
就地逆置即空间复杂度为O(1)
解法一:
将头结点摘下,然后从第一结点开始,依次前插入到头结点的后面(头插法建立单链表),直到最后一个结点为止
LinkList Reverse_1(LinkList L){ LNode *p,*r;//p为工作指针,r为p的后继,以防断链 p=L->next;//从第一个元素结点开始 L->next=NULL;//将L的next域置为null while(p!=NULL){ r=p->next;//暂存p的后继 p->next=L->next;//将p结点插入到头结点之后 L->next=p; p=r; } return L;}
解法二:
假设pre,p和r指向3个相邻的结点,假设经过若干操作,*pre之前的结点的指针都已调整完毕,他们的next都指向其原前驱结点。现在令*p结点的next域指向*pre结点,为防止*p的后继结点断开,用r来指向原*p的后继结点。
处理时注意两点:
一,在处理第一个结点时,应将next域置为NULL,应为要作为新表的尾结点
二,处理完最后一个结点,要将头结点的指针指向它。
LinkList Reverse_2(LinkList L){ LNode *pre,*p=L->next,*r=p->next; p=L->next;//处理第一个结点 while(r!=NULL){//r为空 说明p为最后一个结点 pre=p;//依次遍历 p=r; r=r->next; p->next=pre;//将指针反转 } L->next=p;//处理最后一个结点 return L;}
1 0
- 单链表的逆序输出及就地逆置
- 单链表逆序(就地逆置和头插)
- 单链表的就地逆置.
- 单链表的就地逆置
- 单链表的就地逆置
- 单链表的就地逆置
- 单链表的就地逆置
- 单链表的就地逆置
- 单链表就地逆置
- 单链表就地逆置
- 单链表就地逆置
- 单链表就地逆置
- 单链表就地逆置
- 单链表就地逆置
- 单链表就地逆置
- 单链表就地逆置
- 单链表就地逆置
- 单链表就地逆置的高效算法
- studio java.lang.OutOfMemoryError: GC overhead limit exceeded
- Retrofit 中文乱码问题
- SQL Server 2000中查询表名,列名及字段类型
- Android5.0以上沉浸式状态栏的问题
- position的四个属性值: relative ,absolute ,fixed,static
- 单链表的逆序输出及就地逆置
- 【Java多线程与并发库】2.传统定时器技术回顾
- IMP-00017: 由于 ORACLE 错误 2304, 以下语句失败: "CREATE TYPE "XXXX_XXX_XXXX问题原因
- FFmpeg学习6:视音频同步
- win环境下mysql 5.7.15 x64变量默认值
- 视频相关术语的介绍
- caffe中的normalization实现
- 今天在学习bootstrap,在使用字体图标的时候,无法显示
- 线性表基本操作