实现带头结点的单链表元素就地逆置
每日数据结构基础题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;
}
实现带头结点的单链表元素就地逆置相关推荐
- 对带头结点的单链表实现就地逆置的算法分析
试写一算法,对单链表实现就地逆置. 实现下列函数: void Inverse(LinkList &L); /* 对带头结点的单链表L实现就地逆置 */ 单链表类型定义如下: typedef ...
- python实现带头结点的单链表的就地逆置_6-1 带头结点的单链表就地逆置 (10 分)...
本题要求编写函数实现带头结点的单链线性表的就地逆置操作函数.L是一个带头结点的单链表,函数ListReverse_L(LinkList &L)要求在不新开辟节点的前提下将单链表中的元素进行逆置 ...
- python实现带头结点的单链表的就地逆置_带头结点的单链表就地逆置
本题要求编写函数实现带头结点的单链线性表的就地逆置操作函数.L是一个带头结点的单链表,函数ListReverse_L(LinkList &L)要求在不新开辟节点的前提下将单链表中的元素进行逆置 ...
- python实现带头结点的单链表的就地逆置_设头指针为head,编写算法实现带头结点单链表head的就地逆置...
链表问题大全!!!刚出炉的还热乎呢!! #include #include typedef struct node { int nDate; struct node *pstnext; }Node; ...
- java实现单链表就地逆置,单链表的就地逆置讲解
{ List *q; List *p = L->next; L -> next = NULL; //单链表就地逆置 while (p != NULL) { q = p -> next ...
- 【单链表】单链表的就地逆置
编写算法实现带头结点单链表seqlist的就地逆置,即利用原带头结点单链表seqlist的结点空间,把数据元素顺序排反 题目分析: 在前面2-18讲了顺序表的就地逆置,但单链表的就地逆置与顺序表有所不 ...
- 对单链表实现就地逆置
对单链表实现就地逆置 /* 对单链表实现就地逆置 */ #include <stdio.h> #include "malloc.h"typedef struct LNo ...
- c语言字符就地逆置,高手看看我的C语言代码单链表实现就地逆置
高手看看我的C语言代码单链表实现就地逆置 单链表实现就地逆置#include #include struct type{ int date; struct type * next;}first;int ...
- 实现单链表的就地逆置
头文件和宏定义 #include<iostream> #include<stdio.h> #include<stdlib.h> #include<malloc ...
最新文章
- 关于华为的E180 3G 无线网卡在windows 7 上的驱动问题
- Malformed server response 解决方案
- 神策数据赋能物流服务行业数字化转型
- 【笔记】 感受野与权值共享 摄像头标定 相机坐标与世界坐标
- sparkSession常见参数设置
- 万能Ghost全攻略(最详细完整的教程)
- Python 词云可视化【爆肝之作】
- Vue中如何解决跨域问题
- 基于因子分析法分析新冠肺炎疫情对房地产业上市公司财务的影响
- oracle软件工程,.Net软件工程师学用Oracle系列(9):系统函数(上)
- rOG魔霸新锐2022和魔霸6区别 哪个好
- 小米妙想PC端连接平板5教程
- vbs执行ctrl+空格_VBS中解决路径带空格的三种方法
- 如何把一组计算机做成云,旧电脑如何变成云电脑?进来了解下云电脑
- 2020FME博客大赛——地下管线-雨水管网 三维可视化
- 谁会嫌钱多啊|最适合学生党的Python兼职攻略以及接私活经验
- 【转】我都30岁了,零基础想转行去学编程,靠谱吗?
- 机械臂速成小指南(十):可达工作空间
- python基础九 函数(中)作用域、命名空间、递归函数
- matlab实现矩阵拼接