每日数据结构基础题2-1

    • 题目:试编写在带头结点的单链表L中对链表的元素进行逆置(所谓就地是指辅助空间复杂度为O(1))
  • 方法一
    • 完整代码如下:
  • 方法二
    • 完整代码如下:

题目:试编写在带头结点的单链表L中对链表的元素进行逆置(所谓就地是指辅助空间复杂度为O(1))

本人第一次在博客发文,希望对网友有用,同时积累数据结构的经验。恳请大佬指正,勿喷
首先,对链表的逆置处理可以根据数组的性质,对链表进行逆置处理,但!!!!链表逆置利用数组时只适用于静态链表,所以不建议利用数组的方法进行处理。因此我们采用了以下的方法。废话不多说,先上代码

方法一

void Inverts_List(PList L)
{PList p;p = L->next;while(p!=NULL){printf("%d\n",p->data);p = p->next;}
}

可以发现所谓的逆置只是一个遍历输出函数,仿佛没有什么技术含量(忽略不计),专业术语解释就是:将头节点摘下,然后从第一个节点开始,依次插入到头节点的后面,知道头节点到达最后一个节点,这样就是实现了链表的逆置。或许你没有听懂,开始的时候我也是没有理解透彻,所以介绍了第二种方法,或许可以帮助各位同学理解和分析。

完整代码如下:

#include<stdio.h>
#include<stdlib.h>
/*编写一个算法实现逆置链表的元素
*/
typedef struct Node
{int data;struct Node *next;}List,*PList;
PList Init_List(PList &L);
void trverse_List(PList L);//不加L等形参也可以,但注意类型必须一致
//个人喜好函数在前面进行声明
int main(void)
{PList L; L = (PList)malloc(sizeof(List));printf("程序开始\n");Init_List(L);printf("输出开始\n");trverse_List(L);return 0;}
//这里利用头插法
PList Init_List(PList &L)
{int x;L->next = NULL;//保证头节点的后继是空的scanf("%d",&x);while(x!=9999)//在建立链表时输入9999时,程序退出建立链表阶段{PList a = (PList)malloc(sizeof(List));a->data = x;a->next = L->next;L->next = a;scanf("%d",&x);}return L;
}void trverse_List(PList L)
{PList p;p = L->next;while(p!=NULL){printf("%d\n",p->data);p = p->next;}
}

方法二

不同于方法一,方法二加深了对指针的理解,更加注重对指针的使用。毕竟在数据结构中“指针满天飞”啊!!!废话不多说,直接上代码

PList Inverts_List(PList L)
{PList pre,p,r;//pre作为临时指针//依次遍历链表L,并且将节点的指针进行反转p = L->next;r = p->next;//当r为空的时候,p为最后一个节点p->next = NULL;while(r!=NULL){pre = p;p = r;r = r->next;//可以理解为后来者居前,p->next = pre;//指针进行反转}L->next = p;return L;
}

完整代码如下:

#include<stdio.h>
#include<stdlib.h>
/*编写一个算法实现逆置链表的元素
*/
typedef struct Node
{int data;struct Node *next;}List,*PList;
PList Init_List(PList &L);
void trverse_List(PList L);
PList Inverts_List(PList &L);
int main(void)
{PList L; L = (PList)malloc(sizeof(List));printf("程序开始\n");Init_List(L);printf("输出开始\n");//Inverts_List(L);trverse_List(L);//trverse_List(L);return 0;}
PList Init_List(PList &L)
{int x;PList b;b = L;L->next = NULL;//保证头节点的后继是空的scanf("%d",&x);while(x!=9999){PList a = (PList)malloc(sizeof(List));a->data = x;a->next = NULL;b->next = a;b = a;scanf("%d",&x);}return L;
}
void trverse_List(PList L)
{PList p;p = L->next;while(p!=NULL){printf("%d\n",p->data);printf("执行\n");p = p->next;}
}
PList Inverts_List(PList &L)
{PList pre,p,r;//pre作为临时指针//依次遍历链表L,并且将节点的指针进行反转p = L->next;r = p->next;p->next = NULL;//当r为空的时候,p为最后一个节点while(r!=NULL){pre = p;p = r;r = r->next;//可以理解为后来者居前,p->next = pre;//指针进行反转}L->next = p;//将头节点的指向调为正确的return L;
}

实现带头结点的单链表元素就地逆置相关推荐

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

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

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

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

  3. python实现带头结点的单链表的就地逆置_带头结点的单链表就地逆置

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

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

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

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

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

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

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

  7. 对单链表实现就地逆置

    对单链表实现就地逆置 /* 对单链表实现就地逆置 */ #include <stdio.h> #include "malloc.h"typedef struct LNo ...

  8. c语言字符就地逆置,高手看看我的C语言代码单链表实现就地逆置

    高手看看我的C语言代码单链表实现就地逆置 单链表实现就地逆置#include #include struct type{ int date; struct type * next;}first;int ...

  9. 实现单链表的就地逆置

    头文件和宏定义 #include<iostream> #include<stdio.h> #include<stdlib.h> #include<malloc ...

最新文章

  1. 关于华为的E180 3G 无线网卡在windows 7 上的驱动问题
  2. Malformed server response 解决方案
  3. 神策数据赋能物流服务行业数字化转型
  4. 【笔记】 感受野与权值共享 摄像头标定 相机坐标与世界坐标
  5. sparkSession常见参数设置
  6. 万能Ghost全攻略(最详细完整的教程)
  7. Python 词云可视化【爆肝之作】
  8. Vue中如何解决跨域问题
  9. 基于因子分析法分析新冠肺炎疫情对房地产业上市公司财务的影响
  10. oracle软件工程,.Net软件工程师学用Oracle系列(9):系统函数(上)
  11. rOG魔霸新锐2022和魔霸6区别 哪个好
  12. 小米妙想PC端连接平板5教程
  13. vbs执行ctrl+空格_VBS中解决路径带空格的三种方法
  14. 如何把一组计算机做成云,旧电脑如何变成云电脑?进来了解下云电脑
  15. 2020FME博客大赛——地下管线-雨水管网 三维可视化
  16. 谁会嫌钱多啊|最适合学生党的Python兼职攻略以及接私活经验
  17. 【转】我都30岁了,零基础想转行去学编程,靠谱吗?
  18. 机械臂速成小指南(十):可达工作空间
  19. python基础九 函数(中)作用域、命名空间、递归函数
  20. matlab实现矩阵拼接

热门文章

  1. 骚操作!程序员埋下每隔几年就触发的逻辑炸弹
  2. python爬取上市公司套期保值公告(巨潮网)--使用Selenium方法
  3. FVCOM - SMS - 画网格
  4. Python入门练习选择题
  5. 内存动态分区分配算法
  6. 后台流量跑得快?软件厂商和运营商或许在偷着乐
  7. IEO大溃败进行时 |链捕手
  8. python的pack方法_pack() Method
  9. vertical-align 属性
  10. Java毕设项目纺织代加工车间生产状态监测系统(java+VUE+Mybatis+Maven+Mysql)