设计一算法查找链表的中间结点。要求该算法的时间复杂度为O(n),空间复杂度为O(1)
设计一算法查找链表的中间结点。要求该算法的时间复杂度为O(n),空间复杂度为O(1)
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct LNode
{ ElemType data; struct LNode *next; int Length;
}LNode, *LinkList;
LinkList Create();
void print(LinkList L);
int main()
{ LinkList L = Create(); print(L); return 0;
}
LinkList Create()
{ LinkList L, p, s; ElemType e; L = (LinkList)malloc(sizeof(LNode));L->next = NULL; p = L; L->Length = 0; scanf_s("%d", &e); while (e != -1) { s = (LinkList)malloc(sizeof(LNode)); s->data = e; p->next = s; p = s; scanf_s("%d", &e);L->Length++; } p->next = NULL; return L;
}
void print(LinkList L)
{ LinkList p; p = L->next; if (L->Length % 2 == 1) { for (int i = 0; i < L->Length / 2; i++)p = p->next; printf("%d", p->data); } if (L->Length % 2 == 0) { for (int i = 0; i < L->Length/ 2-1; i++) p = p->next; printf("%d %d", p->data,p->next->data); }
}
设计一算法查找链表的中间结点。要求该算法的时间复杂度为O(n),空间复杂度为O(1)相关推荐
- (关于单链表的真题)已知一个带有表头结点的单链表...请设计一个尽可能高效的算法,查找链表中倒数第k个位置的结点。
真题描述 已知一个带有表头结点的单链表,结点结构为 data next 假设该链表只给出了头指针head.在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点. 若查找成 ...
- 已知一个带有表头结点的单链表,结点结构为 data link 假设该链表只给出了头指针list。在不改变链表的前提下,请设计一个尽可能高效的 算法,查找链表中倒数第k个位置
分析: 这是一个单链表算法题,题中说要在不改变链表本身的前提下,设计一个尽可能高效的算法,说明时间复杂度.空间复杂度都要尽可能地高效,常数也要尽可能小. 思路: 设置两个指针p和q,指p针在指针q后k ...
- linux加密框架 crypto 算法管理 - 算法查找接口 crypto_alg_mod_lookup
参考链接 Linux加密框架的算法管理(二)_家有一希的博客-CSDN博客 linux加密框架 crypto 算法管理 - 算法查找接口 crypto_find_alg_CHYabc123456hh的 ...
- C语言Cruskal算法查找最小生成树(附完整源码)
C语言Cruskal算法查找最小生成树 Cruskal算法查找最小生成树完整源码 Cruskal算法查找最小生成树完整源码 #include <stdio.h> #include < ...
- 已知一个带有表头的单链表,结点结构为data-link,假设该链表只给出了头指针list。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点(k为正整数)。
今天和大家分享一道2009年代码为408的一道真题: 已知一个带有表头的单链表,结点结构为data-link,假设该链表只给出了头指针list.在不改变链表的前提下,请设计一个尽可能高效的算法,查找链 ...
- 请设计一个既节省时间又节省空间的算法来找出该链表中的倒数第m个元素
给定一个单向链表(长度未知),请设计一个既节省时间又节省空间的算法来找出该链表中的倒数第m个元素. 实现这个算法,并为可能出现的特例情况安排好处理措施. 倒数第m个元素"是这样规定的:当m= ...
- 算法---查找倒数第k个链表的值
算法-查找倒数第k个链表的值 代码: link.h #pragma once #define elemType int #include<stdlib.h> typedef struct ...
- 【iOS高级资深工程师面试篇】⑪、2022年,金九银十我为你准备了《iOS高级资深工程师面试知识总结》 算法部分 字符串反转-链表反转-有序数组组合-Hash算法-查找两个子视图的共同父视图
iOS高级资深工程师面试篇系列 - 已更新3篇 UI部分1/3 -UITableView-事件传递&视图响应 UI部分2/3 -图像显示原理-UI卡顿&掉帧 UI部分3/3 -UIVi ...
- JavaScript——leetcode算法入门876. 链表的中间结点【双指针专题】
题目描述 给定一个头结点为 head 的非空单链表,返回链表的中间结点. 如果有两个中间结点,则返回第二个中间结点. 示例 1: 输入:[1,2,3,4,5] 输出:此列表中的结点 3 (序列化形式: ...
最新文章
- 办公计算机培训方案,计算机办公软件应用培训教学计划规划方案.docx
- COJN 0575 800601滑雪
- 日本搞出奇妙充电屋,坐在任意位置都能隔空充电!研究登上Nature子刊
- linux的du和df命令,du和df命令都是Linux系统的重要工具
- php服务器怎么返回信息,php怎么返回服务器ip地址
- 慕课网之JavaScript-confirm
- 出栈顺序 与 卡特兰数(Catalan)的关系
- 搞懂Java的反射机制
- RabbitMq(十六)单机多实例集群搭建步骤介绍
- mvvm模式和mvc的区别_MVC,MVVM,MVP是指什么,它们之间有啥区别
- 装配标准工时如何计算?详解:装配的标准工时计算方法
- excel嵌入动态二维码 含中文
- ue怎么转换html格式,UE编辑器UltraEdit怎么格式化代码
- java画脸_用Java画人脸
- 后端速成JavaScript
- ECSHOP问题总结
- 如何知道股票里面有庄
- 提取、修改、重建deb包
- Linux下的打包(tar)、压缩(gzip / bzip2)
- 北京现代APP每日问答合集(持续更新)