【问题描述】试实现线性表的就地逆置算法,即在原表的存储空间将线性表(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;
}

单链表的应用 就地逆置相关推荐

  1. python实现带头结点的单链表的就地逆置_设头指针为head,编写算法实现带头结点单链表head的就地逆置...

    链表问题大全!!!刚出炉的还热乎呢!! #include #include typedef struct node { int nDate; struct node *pstnext; }Node; ...

  2. 无头结点单链表的逆置_单链表的增删查 逆置 倒数第k个节点等问题

    对于单链表而言,它没有双链表那么复杂,它只有头节点,尾节点,节点数据,后继指针.在下面本人实现了 单链表的 增   删   插  查  改. #include #include #include #i ...

  3. 用C++实现单链表的创建、逆置和输出 的两种方法

    http://blog.csdn.net/lfeng_coding/article/details/47300563 题目描述:在已知单链表头节点的情况下,设计算法逆置单链表并输出 方法一:采用首先将 ...

  4. 逆置单链表c语言程序,逆置单链表C语言

    /*10.2-7-2011-05-08-19.40.c -- 第十章第二节第七题*/ #include #include /*明显常量定义*/ #define FALSE (0) #define TR ...

  5. 【单链表】单链表的就地逆置

    编写算法实现带头结点单链表seqlist的就地逆置,即利用原带头结点单链表seqlist的结点空间,把数据元素顺序排反 题目分析: 在前面2-18讲了顺序表的就地逆置,但单链表的就地逆置与顺序表有所不 ...

  6. java实现单链表就地逆置,单链表的就地逆置讲解

    { List *q; List *p = L->next; L -> next = NULL; //单链表就地逆置 while (p != NULL) { q = p -> next ...

  7. 对带头结点的单链表实现就地逆置的算法分析

    试写一算法,对单链表实现就地逆置. 实现下列函数: void Inverse(LinkList &L);  /* 对带头结点的单链表L实现就地逆置 */ 单链表类型定义如下: typedef ...

  8. 无头结点单链表的逆置_第1章第2节练习题11 就地逆置单链表

    ## 问题描述 > 试编写在带头结点的单链表就地逆置,所谓"就地"是指辅助空间为O(1) ## 算法思想1 > 将头结点摘下,然后从第一个结点开始,依次插入到头节点的后 ...

  9. python实现带头结点的单链表的就地逆置_6-1 带头结点的单链表就地逆置 (10 分)...

    本题要求编写函数实现带头结点的单链线性表的就地逆置操作函数.L是一个带头结点的单链表,函数ListReverse_L(LinkList &L)要求在不新开辟节点的前提下将单链表中的元素进行逆置 ...

最新文章

  1. 个人的关于c++运算符重载的总结
  2. LeetCode Coin Change(动态规划)
  3. ORACLE内存结构简介
  4. 【机器学习PAI实践九】如何通过机器学习实现云端实时心脏状况监测
  5. soj#547 bzoj5046 分糖果游戏
  6. Entity Framework Core Like 查询揭秘
  7. c语言将十进制转化为二进制算法_base64算法初探即逆向分析
  8. day13 java的多态
  9. springMVC数据格式转换的三种实现
  10. emmc linux 识别分区_linux下给U盘分区并制作文件系统
  11. 4.UML2 软件建模入门与提高 --- 用例图
  12. 孔浩Maven视频教程
  13. 私有化单机题库管理软件“题库管家”1.3版本正式发布,windows版与mac版下载地址
  14. 夜曲歌词 拼音_夜曲歌词完整版 lrc 周杰伦 - Yo歌词网
  15. win10任务栏卡死桌面正常的解决方法
  16. 【PMP】PMBOK 笔记 第12章 项目采购管理
  17. 那些年,我们一起做过的 Java 课后练习题(51 - 55)
  18. java蚂蚁智力题,智力题大全_附答案
  19. JAVA接口签名sign生成工具类
  20. Java程序界面设计

热门文章

  1. 虚拟化技术--服务器虚拟化
  2. Something about WinCE6.0 R3
  3. 设计模式常见面试真题详解
  4. acrobat 控件可以发布吗_短视频可以同时在多个平台发布吗?
  5. Hbase读写数据的原理解析
  6. steam一键授权工具_半个东的时间让你省了一个亿 Steam免费游戏一键领取
  7. C++里的花括号{},块,作用域
  8. Linux基础提高_系统性能相关命令
  9. 【java设计模式】【行为模式Behavioral Pattern】迭代器模式Iterator Pattern
  10. 02-合并frame