单链表的应用 就地逆置
【问题描述】试实现线性表的就地逆置算法,即在原表的存储空间将线性表(a1,a2,a3....an)逆置为(an...a3,a2,a1).
[分析]就地逆置就是不需要额外申请结点空间,只需要利用原来的表中的结点空间。若对顺序表中的元素进行逆置,可 以借助“交换”前后相应元素的方法实现,但是对于单链表就不能“交换”,时间复杂度就会达到O(n^2)。
【思想】逆置后的单链表初始化为空表,表中的结点不是新生成的,而是从原链表中依次“删除”,再逐个以头插法放置到逆置表中,如此循环,直至原链表为空表止。
#include <stdio.h>
#include <stdlib.h>
#define ElemType char
typedef struct Node /*结点类型定义*/
{ ElemType data;struct Node * next;
}Node, *LinkList; /* LinkList为结构指针类型*/LinkList CreateFromTail()
/*通过键盘输入表中元素值,利用尾插法建单链表,并返回该单链表头指针L*/
{ LinkList L;Node *r, *s;char c;int flag =1; /*设置一个标志,初值为1,当输入"$"时,flag为0,建表结束*/L=(Node * )malloc(sizeof(Node)); L->next=NULL; /*为头结点分配存储空间,建立空的单链表L*/r=L; /*r指针动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*/while(flag) /*循环输入表中元素值,将建立新结点s插入表尾*/{c=getchar();if(c!='$'){s=(Node*)malloc(sizeof(Node));s->data=c;r->next=s;r=s;}else{flag=0;r->next=NULL; /*将最后一个结点的next链域置为空,表示链表的结束*/}} return L;
} void ReverseList(LinkList L)
{ Node *p,*q;p=L->next;L->next=NULL;while(p!=NULL){ q=p->next; /*q指针保留p->next得值*/p->next=L->next;L->next=p; /*将p结点头插入到单链表L中*/p=q; /*p指向下一个要插入的结点*/}
}int main()
{LinkList l;Node *p;printf("用尾插法建立单链表,请输入链表数据,以$结束!\n");l = CreateFromTail();printf("输入的单链表为:\n");p = l->next;while(p!=NULL){printf("%c\n",p->data);p=p->next;}ReverseList(l);printf("逆置后的单链表为:\n");p = l->next;while(p!=NULL){printf("%c ",p->data);p=p->next;}printf("\n");return 0;
}
单链表的应用 就地逆置相关推荐
- python实现带头结点的单链表的就地逆置_设头指针为head,编写算法实现带头结点单链表head的就地逆置...
链表问题大全!!!刚出炉的还热乎呢!! #include #include typedef struct node { int nDate; struct node *pstnext; }Node; ...
- 无头结点单链表的逆置_单链表的增删查 逆置 倒数第k个节点等问题
对于单链表而言,它没有双链表那么复杂,它只有头节点,尾节点,节点数据,后继指针.在下面本人实现了 单链表的 增 删 插 查 改. #include #include #include #i ...
- 用C++实现单链表的创建、逆置和输出 的两种方法
http://blog.csdn.net/lfeng_coding/article/details/47300563 题目描述:在已知单链表头节点的情况下,设计算法逆置单链表并输出 方法一:采用首先将 ...
- 逆置单链表c语言程序,逆置单链表C语言
/*10.2-7-2011-05-08-19.40.c -- 第十章第二节第七题*/ #include #include /*明显常量定义*/ #define FALSE (0) #define TR ...
- 【单链表】单链表的就地逆置
编写算法实现带头结点单链表seqlist的就地逆置,即利用原带头结点单链表seqlist的结点空间,把数据元素顺序排反 题目分析: 在前面2-18讲了顺序表的就地逆置,但单链表的就地逆置与顺序表有所不 ...
- java实现单链表就地逆置,单链表的就地逆置讲解
{ List *q; List *p = L->next; L -> next = NULL; //单链表就地逆置 while (p != NULL) { q = p -> next ...
- 对带头结点的单链表实现就地逆置的算法分析
试写一算法,对单链表实现就地逆置. 实现下列函数: void Inverse(LinkList &L); /* 对带头结点的单链表L实现就地逆置 */ 单链表类型定义如下: typedef ...
- 无头结点单链表的逆置_第1章第2节练习题11 就地逆置单链表
## 问题描述 > 试编写在带头结点的单链表就地逆置,所谓"就地"是指辅助空间为O(1) ## 算法思想1 > 将头结点摘下,然后从第一个结点开始,依次插入到头节点的后 ...
- python实现带头结点的单链表的就地逆置_6-1 带头结点的单链表就地逆置 (10 分)...
本题要求编写函数实现带头结点的单链线性表的就地逆置操作函数.L是一个带头结点的单链表,函数ListReverse_L(LinkList &L)要求在不新开辟节点的前提下将单链表中的元素进行逆置 ...
最新文章
- 个人的关于c++运算符重载的总结
- LeetCode Coin Change(动态规划)
- ORACLE内存结构简介
- 【机器学习PAI实践九】如何通过机器学习实现云端实时心脏状况监测
- soj#547 bzoj5046 分糖果游戏
- Entity Framework Core Like 查询揭秘
- c语言将十进制转化为二进制算法_base64算法初探即逆向分析
- day13 java的多态
- springMVC数据格式转换的三种实现
- emmc linux 识别分区_linux下给U盘分区并制作文件系统
- 4.UML2 软件建模入门与提高 --- 用例图
- 孔浩Maven视频教程
- 私有化单机题库管理软件“题库管家”1.3版本正式发布,windows版与mac版下载地址
- 夜曲歌词 拼音_夜曲歌词完整版 lrc 周杰伦 - Yo歌词网
- win10任务栏卡死桌面正常的解决方法
- 【PMP】PMBOK 笔记 第12章 项目采购管理
- 那些年,我们一起做过的 Java 课后练习题(51 - 55)
- java蚂蚁智力题,智力题大全_附答案
- JAVA接口签名sign生成工具类
- Java程序界面设计