【LeetCode】链表练习 9 道题
第一题:移除链表元素
题目描述:
给你一个链表的头节点head
和一个整数val
,请你删除链表中所有满足Node.val == val
的节点,并返回新的头节点 。
列表中的节点数目在范围 [0, 10^4] 内
1 <= Node.val <= 50
0 <= val <= 50
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*///题目框架
struct ListNode* removeElements(struct ListNode* head, int val){
}
方法一:
利用链表删除的思路。定义一个prev
和一个cur
指针变量,如果cur
指向的值不是val
,prev
和cur
都向后移动;cur
指向的值是val
,就进行删除操作。但如果是第一个结点的删除,需要额外处理。
参考代码如下:
struct ListNode* removeElements(struct ListNode* head, int val)
{struct ListNode* prev = NULL;struct ListNode* cur = head;while (cur != NULL){if (cur->val != val){prev = cur;cur = cur->next;}else//cur->val == val{//第一个结点的删除if (NULL == prev){head = cur->next;free(cur);cur=head;}else//中间结点的删除{prev->next = cur->next;free(cur);cur = prev->next;}}}return head;
}
方法二:
通过定义指针变量cur
对给定的链表进行遍历,如果cur->val != val
,就将该节点尾插到新链表;如果cur->val == val
,就将该节点进行删除。
参考代码如下:
struct ListNode* removeElements(struct ListNode* head, int val)
{struct ListNode* cur = head;struct ListNode* tail = NULL;struct ListNode* del = NULL;head = NULL;while (cur != NULL){//插入情况if (cur->val != val){//头插情况if (NULL == tail){head = tail = cur;}else//尾插情况{tail->next = cur;tail = tail->next;}cur = cur->next;}else//删除情况{del = cur;cur = cur->next;free(del);del=NULL;}}if(tail != NULL){tail->next = NULL;}//返回新链表return head;
}
第二题:反转链表
题目描述:
给你单链表的头节点head
,请你反转链表,并返回反转后的链表。
链表中节点的数目范围是 [0, 5000]
-5000 <= Node.val <= 5000
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*///题目框架
struct ListNode* reverseList(struct ListNode* head{
}
方法一:
直接颠倒节点指针指向进行反转。
定义三个指针变量prev
,cur
,next
。prev
记录cur
的上一个节点,next
记录cur
的下一个节点。
参考代码如下:
struct ListNode* reverseList(struct ListNode* head)
{struct ListNode* prev = NULL;struct ListNode* cur = head;struct ListNode* next = NULL;while (cur != NULL){next = cur->next;//进行指针指向的反转cur->next = prev;prev = cur;cur = next;}return prev;
}
第三题:链表的中间结点
题目描述:
给你单链表的头结点head
,请你找出并返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
链表的结点数范围是 [1, 100]
1 <= Node.val <= 100
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*///题目框架
struct ListNode* middleNode(struct ListNode* head){
}
方法一:
可以使用快慢指针来解决这道题。
可以定义一个快指针fast
和一个慢指针slow
,快指针一次走 2 步,慢指针一次走 1 步,当快指针走到结束,慢指针正好走到一半。
参考代码如下:
struct ListNode* middleNode(struct ListNode* head)
{struct ListNode* slow = head;struct ListNode* fast = head;//fast==NULL和fast->next==NULL,都代表走到结束位置while(fast != NULL && fast->next != NULL){slow = slow->next;fast = fast->next->next;}return slow;
}
第四题:链表中倒数第k个结点
这道题用的是牛客网的。
题目描述:
输入一个链表,输出该链表中倒数第k个结点。
/*** struct ListNode {* int val;* struct ListNode *next;* };*//*** * @param pListHead ListNode类 * @param k int整型 * @return ListNode类*///题目框架
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {
}
方法一:
这道题也是可以使用快反指针的方法来解决。
定义一个快指针fast
,定义一个慢指针slow
,快指针先走k
步,然后快指针和慢指针一起走,直到快指针走到结束,慢指针就走到倒数第k
个位置。
参考代码如下:
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k )
{struct ListNode* slow = pListHead;struct ListNode* fast = pListHead;//fast先走k步while (k--){//如果pListHead.length < k,出错返回NULLif(NULL == fast){return NULL;}fast = fast->next;}//fast走到NULL算结束while (fast != NULL){slow = slow->next;fast = fast->next;}return slow;
}
第五题:合并两个有序链表
题目描述:
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
两个链表的节点数目范围是 [0, 50]
-100 <= Node.val <= 100
l1 和 l2 均按 非递减顺序 排列
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*///题目框架
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){
}
方法一:
要将两个链表合并为一个链表,可以尝试将其中一个链表中的所有值全部插入到另一个链表中。这种方法看似简单,但其实会有很多细节性的处理。
参考代码如下:
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{//存在空链表的情况if (NULL == list1){return list2;}else if (NULL == list2){return list1;}//找出第一个结点值最小的链表,让其做被插入的链表struct ListNode* head = NULL;struct ListNode* cur = NULL;if ((list1->val) < (list2->val)){head = list1;cur = list2;}else{head = list2;cur = list1;}//cur链表节点不断插入到head链表struct ListNode* prev = head;struct ListNode* pnext = prev->next;//cur==NULL代表插入完成while (cur != NULL){//pnext!=NULL意味着在两个节点中间进行插入if (pnext != NULL){if ((cur->val) >= pnext->val){//不符合升序的条件,继续向后查找prev = prev->next;pnext = pnext->next;}else if ((cur->val) >= (prev->val) && (cur->val) <= (pnext->val)){//符合升序条件,进行插入prev->next = cur;prev = prev->next;cur = cur->next;prev->next = pnext;}}else //在链表尾进行插入{prev->next = cur;break;}}return head;
}
方法二:
可以采用归并的思想将两个链表归并到一个新链表之中。
//采用设置头结点的方式解决
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{struct ListNode* head = NULL;struct ListNode* tail = NULL;//头结点head = tail = (struct ListNode*)malloc(sizeof(struct ListNode));while ((list1 != NULL) && (list2 != NULL)){if((list1->val) < (list2->val)){tail->next = list1;tail = tail->next;list1 = list1->next;}else{tail->next = list2;tail = tail->next;list2 = list2->next;}}if(NULL == list1){tail->next = list2;}else{tail->next = list1;}struct ListNode* fNode = head;head = head->next;free(fNode);fNode = NULL;return head;
}
第六题:链表分割
题目描述:
现有一链表的头指针ListNode* pHead
,给一定值x
,编写一段代码将所有小于x
的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。
/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) : val(x), next(NULL) {}
};*///题目框架
class Partition {
public:ListNode* partition(ListNode* pHead, int x) {}
};
方法一:
可以定义两个都带头结点的链表:lessHead
和greaterHead
,将比x
小的值尾插到lessHead
的链表,比x
大的值尾插到greaterHead
的链表,最后将两个链表做一个链接。
参考代码如下:
class Partition {
public:ListNode* partition(ListNode* pHead, int x) {// write code herestruct ListNode* lessHead = NULL;struct ListNode* lessTail = NULL;struct ListNode* greaterHead = NULL;struct ListNode* greaterTail = NULL;lessHead = lessTail = (struct ListNode*)malloc(sizeof(struct ListNode));greaterHead = greaterTail = (struct ListNode*)malloc(sizeof(struct ListNode));struct ListNode* cur = pHead;while(cur!=NULL){if((cur->val) < x){lessTail->next = cur;lessTail = lessTail->next;cur = cur->next;}else {greaterTail->next = cur;greaterTail = greaterTail->next;cur = cur->next;}}lessTail->next = greaterHead->next;//需要将greaterTail作为合并后链表的尾结点,尾结点的next指针要置空greaterTail->next = NULL;struct ListNode* head = lessHead->next;free(lessHead);free(greaterHead);return head;}
};
第七题:回文链表
题目描述:
给你一个单链表的头节点head
,请你判断该链表是否为回文链表。如果是,返回true
;否则,返回false
。
- 链表中节点数目在范围
[1, 10^5]
内 0 <= Node.val <= 9
//题目框架
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/
bool isPalindrome(struct ListNode* head){
}
方法一:
这道题可以结合链表查找中间结点和链表逆置来解决。将中间位置之后的节点都进行逆置,然后从两端遍历进行比较即可。
参考代码如下:
bool isPalindrome(struct ListNode* head)
{struct ListNode* slow = head;struct ListNode* fast = head;while(fast != NULL && (fast->next) != NULL){slow = slow->next;fast = fast->next->next;}struct ListNode* prev = slow;struct ListNode* cur = slow->next;struct ListNode* next = NULL;//相当于中间结点做两个链表的相交节点slow->next = NULL;while (cur != NULL){next = cur->next;cur->next = prev;prev = cur;cur = next;}//从两端开始比较while(prev != NULL){if(prev->val != head->val){return false;}prev = prev->next;head = head->next;}return true;
}
第八题:相交链表
题目描述:
给你两个单链表的头节点headA
和headB
,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回null
。
listA
中节点数目为m
listB
中节点数目为n
1 <= m, n <= 3 * 10^4
1 <= Node.val <= 10^5
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*///题目框架
struct ListNode* getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
}
方法一:
这道题有一个很妙的解法。先分别遍历A链表和B链表,求出A链表和B链表的长度。根据AB链表长度的差值,决定A或B先走差值步。然后A和B一起走,如果相遇,相遇的节点就是相交的第一个结点;如果走完了都没有相遇,说明A和B没有相交节点。
参考代码如下:
struct ListNode* getIntersectionNode(struct ListNode *headA, struct ListNode *headB)
{struct ListNode* curA = headA;struct ListNode* curB = headB;int countA = 0;int countB = 0;while (curA != NULL){++countA;curA = curA->next;}while (curB != NULL){++countB;curB = curB->next;}curA = headA;curB = headB;int count = 0;if (countA > countB){count = countA - countB;while(count--){curA = curA->next;}}else{count = countB-countA;while (count--){curB = curB->next;}}while (curA != NULL){if (curA == curB){return curA;}curA = curA->next;curB = curB->next;}return NULL;
}
第九题:复制带随机指针的链表
题目描述:
给你一个长度为n
的链表,每个节点包含一个额外增加的随机指针random
,该指针可以指向链表中的任何节点或空节点。
构造这个链表的 深拷贝。 深拷贝应该正好由n
个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的next指针和
random`指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。
返回复制链表的头节点。
0 <= n <= 1000
-10^4 <= Node.val <= 10^4
Node.random
为null
或指向链表中的节点。
/*** Definition for a Node.* struct Node {* int val;* struct Node *next;* struct Node *random;* };*///题目框架
struct Node* copyRandomList(struct Node* head) {
}
方法一:
这道题有一个很妙的方法。在每一个节点后面都链接一个自己的copy
节点,然后让copy->random=prevCopy->random->next
,遇到NULL
另作处理。最后把拷贝节点取下来,链接到一起,恢复原链表即可。
参考代码如下:
struct Node* copyRandomList(struct Node* head)
{struct Node* cur = head;//节点的插入while (cur != NULL){struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));newNode->val = cur->val;newNode->next = cur->next;cur->next = newNode;cur = newNode->next;}//random指针的链接cur = head;struct Node* newCur = NULL;while (cur != NULL){newCur = cur->next;if (cur->random != NULL){newCur->random = cur->random->next;}else{newCur->random = NULL;}cur = newCur->next;}//新链表的取下cur = head;struct Node* newHead = NULL;struct Node* tail = NULL;while (cur != NULL){newCur = cur->next;cur->next = newCur->next;if (NULL == newHead){newHead = tail = newCur;}else{tail->next = newCur;tail = tail->next;}cur = cur->next;}return newHead;}
相关文章:
【LeetCode】链表练习 9 道题
第一题:移除链表元素 题目描述: 给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val val的节点,并返回新的头节点 。 列表中的节点数目在范围 [0, 10^4] 内1 < Node.val < 500 < val < 50 /…...
轴承远程监控系统解决方案
一、项目背景 随着现代机械设备朝着高集成、高精密度、系统化、自动化的方向发展,在工业生产中一旦机器发生故障,即使局部失灵,都可能导致设备工作失效,甚至造成整个自动化车间停产,从而给工业生产带来巨大的损失。轴承…...
阿里云轻量服务器Workbench root远程连接和一键连接的区别
阿里云轻量应用服务器远程连接支持Workbench root用户连接和Workbench一键连接,Workbench root需要输入root密码,一键连接不需要输入密码,但是也无法获得root权限,阿里云百科来详细说下阿里云轻量应用服务器远程连接说明ÿ…...
带你用纯C实现一个内存池(图文结合)
为什么要用内存池 为什么要用内存池?首先,在7 * 24h的服务器中如果不使用内存池,而使用malloc和free,那么就非常容易产生内存碎片,早晚都会申请内存失败;并且在比较复杂的代码或者继承的屎山中,…...
ChatGPT使用案例之图像生成
ChatGPT使用案例之图像生成 这里一节我们介绍一下ChatGPT的图像生成,这里我们使用代码来完成,也就是通过API 来完成,因为ChatGPT 本身是不能生成图片的,言外之意我们图片生成是ChatGPT通过其他方式生成的 Images API提供了三种与…...
蚁群算法优化旅行问题
%%%%%%%%%%%%蚁群算法解决 TSP 问题%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%% clear all; %清除所有变量 close all; %清图 clc; %清屏 m 50; %蚂蚁个数 Alpha 1; %信息素重要程度参数 Beta 5; %启发式因子重要程度参数 Rho 0.1; %信息素蒸发系数 G 20…...
树数据结构
什么是树数据结构? 树数据结构是一种层次结构,用于以易于导航和搜索的方式表示和组织数据。它是由边连接的节点集合,节点之间具有层次关系。树的最顶端的节点称为根,它下面的节点称为子节点。每个节点可以有多个子节点,…...
Spring Boot整合Redis并提供多种实际场景的应用
Spring Boot整合Redis并提供多种实际场景的应用1. 整合Redis2. 场景应用2.1 缓存2.2 分布式锁2.3 计数器2.4 发布/订阅3. 总结Spring Boot是一个快速构建基于Spring框架的应用程序的工具,它提供了大量的自动化配置选项,可以轻松地集成各种不同的技术。Re…...
VR全景图片,助力VR全景制作,720全景效果图
VR全景图片是指通过全景相机或多相机组合拍摄全景画面,并进行拼接处理生成全景图像的过程。VR全景图片的应用范围广泛,包括旅游和景区、房地产、汽车、艺术和文化、电影和娱乐等领域。本文将详细介绍VR全景图片的类型、应用场景、市场前景和发展趋势。 一…...
Kali Linux20款重要软件
Kali Linux 是一个流行的网络安全测试平台,它包含了大量的工具和应用程序,以下是其中20款最常用的软件和工具: Metasploit:Metasploit 是一个广泛使用的漏洞评估工具,可以帮助安全专业人员测试系统中的漏洞。Aircrack…...
C语言测试五
windows是什么类型的系统(实时还是分时)?有什么区别? 分时操作系统。如果在单核的情况下,分时操作系统多个进程共用一个单核,该单核会将其执行时间分成相应的时间片,每个进程占用一定的时间片&a…...
【微服务~原始真解】Spring Cloud —— 访问数据库整合Druid数据源
🔎这里是【秒懂云原生】,关注我学习云原生不迷路 👍如果对你有帮助,给博主一个免费的点赞以示鼓励 欢迎各位🔎点赞👍评论收藏⭐️ 👀专栏介绍 【秒懂云原生】 目前主要更新微服务,…...
前端入门必刷题,经典算法—两数之和
优美的前⾔ 年轻的码农哟~ 你是不是⼀直在思考⾃我提升的问题~ 思来想去,决定从算法抓起(单押)~ 拿起⼜放下,经历过多少次放弃(单押 ✖ 2)~ 决定了!这次让我来帮你梳理(单押 ✖ 3&a…...
‘海外/国外‘地区微博签到shu据(正题在第二部分)
最近失眠,研究了项关于weibo爬虫的新功能,种种原因,大家可跳过第一部分的引用直接看第二部分。 内容来源:健康中国、生命时报、央视等 失眠标准一:3个“30分钟” ● 入睡困难,从躺下想睡到睡着间隔…...
Springboot——SB整合Mybatis的CURD(基于注解进行开发)
此处是根据需求实现基本操作 上面这里涉及到了条件分页查询,还有增加和批量删除员工信息,右边编辑就是先查询后更新操作,叫做查询回显,然后在原有基础上进行更新 环境准备 在下面的入门案例的整体环境下把数据库表换成empSpring…...
现在大专生转IT可行吗?
当然可行的。 大专也是人,为什么不可以选择喜欢的专业学习,现在大学生遍地都是,学历已经不是限制你发展的因素了。有的人就是不擅长理论学习,更喜欢技术。IT也只是一个普普通通的技术行业,跟其他技术行业一样…...
XC7A50T-1CSG324I、XC7A50T-2CSG324I Artix-7 FPGA可编程门阵列
Artix-7 FPGA能够在多个方面实现更高的性价比,这些方面包括逻辑、信号处理、嵌入式内存、LVDS I/O、内存接口,以及收发器。MicroBlaze CPU针对Xilinx FPGA进行了优化,是一种可高度配置的32位RISC处理器,可为微控制器、实时处理器和…...
linux安装图片处理软件ImageMagick
下载地址: wget https://download.imagemagick.org/archive/ImageMagick-7.1.1-4.tar.gz 或者 wget --no-check-certificate https://download.imagemagick.org/archive/ImageMagick-7.1.1-4.tar.gz 安装命令: tar -zxvf ImageMagick-7.1.1-4.tar.…...
【Java基础】JavaCore核心-反射技术
文章目录1.什么是反射技术2.反射-获取类对象方式3.反射-获取声明构造器4.反射-对象创建实战5.反射-方法和属性实战6.反射-属性值操作实战7.反射-invoke运行类方法1.什么是反射技术 Java的反射(reflection)机制是指在程序的运行状态中 可以构造任意一个类…...
AWGN后验估计下的均值与协方差关系(向量和标量形式)
文章目录AWGN信道向量模型后验均值与协方差的关系从实数域拓展到复数域小结AWGN信道向量模型 考虑一个随机向量x∼pX(x)\boldsymbol x \sim p_{\boldsymbol X}(\boldsymbol x)x∼pX(x),信道模型为 qxv,v∼N(0,Σ)\boldsymbol q \boldsymbol x \boldsymbol v, \…...
Linux常用命令之文件搜索命令
1、常用搜索-find 命令find英文原意find所在路径/bin/find执行权限所有用户功能描述文件搜索语法find [搜索范围] [搜索条件] (默认准确搜索)范例find /etc -name init?? 常用的搜索条件的选项包括: -name:按照文件名进行匹配查找,例&…...
ChatGPT给软件测试行业带来的可能
软件测试在软件开发过程中扮演着至关重要的角色,因为它可以确保软件的质量和可靠性。而随着人工智能技术的不断发展,ChatGPT作为一个强大的自然语言处理工具,可以在软件测试中发挥出许多重要的作用。本文将介绍ChatGPT在软件测试应用中带来的…...
Cadence Allegro 导出Properties on Nets Report报告详解
⏪《上一篇》 🏡《上级目录》 ⏩《下一篇》 目录 1,概述2,Properties on Nets Report作用3,Properties on Nets Report示例4,Properties on Nets Report导出方法4.1,方法14.2,方法2B站关注“硬小二”浏览更多演示视频...
JAVA代码 实现定位数据动态聚集并绘制多边形区域
文章目录思路1、限制聚合距离2、绘制多边形区域3、多边形区域之间合并4、多边形定边点4、逻辑流程一些性能上的优化1、多边形设置圆心2、采用分支合并思路3、清理聚集较分散区域合理性处理1、解决多边形内凹角问题2、解决定边点插入位置问题3、多边形区域扩展成果展示最近有根据…...
基于储能进行调峰和频率调节研究【超线性增益的联合优化】(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
体验 Linux 的几个监控命令(htop、nmon、netdata)
体验 Linux 的几个监控命令htopnmonnetdatahtop 安装, sudo dnf install -y htop使用, htopnmon 安装, sudo dnf install -y nmon使用, nmon输入c, 输入C, 输入m, 输入n, 输入…...
NOC大赛2022NOC软件创意编程初赛图形化小低组(小学高年级组)
一、选择题 1.如果要控制所有角色一起朝舞台区右侧移动,下面哪个积太块是不需要的 2.要想让三个角色一起移动起来,下面哪个积木块没有作用 ? 3.小猴按照下面的程序前进,小猴最后一次前进了()步。 4.小可同学写了一个画笔程序画出花朵,但是运行后什么都看不到,不可…...
python进行股票收益率计算和风险控制的实现
股票收益率计算和风险控制的实现 在进行股票投资时,计算收益率和进行风险控制是非常重要的。本文将介绍一个与此相关的函数:radio_day_cal()。 radio_day_cal()函数 def radio_day_cal(last_day, sheet_name, df_dict, code_list, new_list):i 0days…...
自从有了这套近4000页的开发文档后,Java面试路上就像开了挂一样
Java是世界最流行的编程语言,也是国内大多数IT公司的主流语言。招聘网站上Java岗位众多,Java工程师似乎不愁找工作。但仔细一看就会发现,Java岗位的招聘薪酬天差地别,人才要求也是五花八门。而在Java工程师求职过程中,…...
Python文件操作
目录 一、文件操作介绍 二、文件的打开和关闭 三、文件的读写 四、文件文件夹相关操作 五、test 一、文件操作介绍 文件 : python中文件是对象 Liunx 文件 : 一切设备都可以看成是文件 磁盘文件 管道 网络Socket 文件属性: 读 写 执行权限 就是把一些存储存放起来&…...
专业做鞋子的网站有哪些/短视频运营方案策划书
我用的网络摄像头是 极速公司的产品,135元人民币。Windows 下驱动为 极速三型。 芯片可能是301P 的。 首先下载驱动。网址: http://mxhaard.free.fr/download.html 就是spca5xx-20050116.tar.gz 文件。 解压缩后,读 INSTALL 文档,…...
网站建设公司类型/昭通网站seo
【题目描述】 Acwing 70. 二叉搜索树的第k个结点 【思路】 二叉搜索树的中序遍历 对应升序序列 那么第k小就是遍历的第k个数 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x…...
做网站类型/缅甸新闻最新消息
满意答案chowjack推荐于 2019.10.23采纳率:57% 等级:10已帮助:3269人1、意思是:在 xxx 之前 应输入表达式。2、下面为C语言的错误大全及中文解释:1: Ambiguous operators need parentheses — 不明确的运算需要用括…...
湖北武汉网站建设/国际新闻最新消息2022
放眼整个人类历史,互联网对人类文明的影响怎么评价也不为过的,而其发端不过是实验室的产物。所以,一开始根本没有考虑运营的问题,如与质量相关的带宽、时延等QOS技术根本没有考虑,由于设计的理念和先天不足,…...
软件网站开发/关键词数据
干净清洁的小说朗读软件。支持 TXT阅读、语音朗诵、点评标注、数据挖掘 干净简洁的界面 TXT直接分章阅读 语音朗读功能 数据挖掘功能 点评标注功能 下载地址 www.gudianxiaoshuo.com...
福建中海建设有限公司网站/市场调研公司
具体信息在我们的石墨文档里,欢迎查看! 文档链接:https://shimo.im/docs/FLWh6EGkzcA6U7co/ 点击链接查看「圈地自萌 Alpha冲刺!!!」,或复制链接用石墨文档 App 打开 转载于:https://www.cnblog…...