算法笔记-链表

深入学习算法:笔记与实践.pdf 本文还有配套的精品资源,点击获取 简介:《算法笔记》是一份涵盖计算机科学基础算法及其应用的详细学习资料,适合编程爱好者和准备面试的开发者。本笔记包括排序、查找、图论、动态规划、贪心算法、回溯法、分治法等核心算法主题,以及数据结构、递归与迭代、位运算等编程基础,同时提供案例分析和面试技巧,帮助学习者系统地提升算法理解和应用能力。 1. 排序算法介绍与应用 排序... 阅读详情

链表结构如下:

struct ListNode{

int m_nValue;

ListNode * m_pNext;

};

1.输入一个链表,输出该链表中倒数第K个结点。


2.求链表的中间结点。如果链表中结点总数为奇数,返回中间结点,如果结点总数是偶数,返回中间两个结点的任意一个。


3.判断一个单向链表是否形成了环形结构。(如果是环形结构,则尾结点的下一个结点不一定是头结点,可能是链表中的任意一个结点)。



思路:

1.

解法1:

可以先遍历一遍链表,得到链表结点总数n,那么再从头结点开始往后走n-k+1步即可找到。

解法2:

定义两个指针,第一个指针从链表的头指针开始遍历向前走k-1,第二个指针保持不动;第一个指针从第k步开始,第二个指针也开始从链表的头指针开始遍历。由于两个指针的距离保持在k-1,当第一个指针到达链表的尾结点时,第二个指针正好是倒数第K个结点。

注意:

如果k值为0,或者头结点为NULL,需要做空值处理,还有如果k值大于链表结点的个数,也需要作处理。


2.

定义两个指针,同时从链表的头结点出发,一个指针一次走一步,另一个指针一次走两步。当走得快的指针走到链表的末尾时,走得慢的指针正好在链表的中间。


3.

定义两个指针,同时从链表的头结点出发,一个指针一次走一步,另一个指针一次走两步,如果走得快的指针追上了走得慢的指针,那么链表即是环形链表,如果走得快的指针走到了链表的末尾都没有追上走得慢的指针,那么链表就不是环形链表。



题目4:

复杂链表的复制:

链表结构为:

strut ComplexListNode{

int m_nValue;

ComplexListNode* m_pNext;

ComplexListNode* m_pSibling;

};

其中m_pSibling用于指向链表中任意一个结点或者置为NULL;

分析:

解法1:

借助哈希表,将源链表结点的指针和新链表的结点指针一一对应存到哈希表中,用于确定m_pSibling的指向

解法2:

分三步走:

(1):根据原始链表的每个结点N创建对应的N‘.把N'链接在每个N的后面,即在原来链表的每个元素中间插入对应的复制结点

(2):假设原始链表上的N的m_pSibling执行结点S,那么其对应复制出来的N’是N的m_pNext指向的结点,同样S‘也是S的m_pNext指向的结点

(3):把这个长链表拆分成两个链表:把奇数位置的结点用m_pNext连接起来就是原始链表,把偶数位置的结点用m_pNext链接起来就是复制出来的链表了。


题目5:

输入一棵二叉搜索树,将该搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

解题思路:

根节点的left指向左子树的最大结点,right指向右子树的最小结点

定义方法ConvertNode(BinaryTreeNode* pNode,BinaryTreeNode** pLastNodeInList)

其中pNode为当前要处理的(子)树的根结点,pLastNodeInList为当前已经处理好的双向链表的尾结点。

ConvertNode表示将当前的(子)树的根节点和已经部分存在的双向链表的尾结点处理,使得该子树整合到双向链表中,形成新的局部双向链表。

这样就可以写出递归代码:

void ConvertNode(BinaryTreeNode * pNode,BinaryTreeNode** pLastNodeInList)

{

if(pNode==null)return;


BinaryTreeNode *pCurrent=pNode;


if(pCurrent->left != NULL)

ConvertNode(pCurrent->left,pLastNodeInList);

pCurrent->left=*pLastNodeInList;


if(*pLastNodeInList != NULL)

(*pLastNodeInList)->right=pCurrent;


*pLastNodeInList=pCurrent;


if(pCurrent->right != NULL)

ConvertNode(pCurrent->right,pLastNodeInList);

}

算法笔记.胡凡(完整版) 该资源为胡凡主编的算法笔记完整版pdf文档,资源真实有效请放心下载。 立即下载

相关推荐

数据结构与算法笔记.pdf

数据结构与算法笔记.pdf

算法笔记-胡凡-两本完整PDF

算法笔记-胡凡-两本完整PDF

Eli_Code 1万+

算法考试笔记.pdf

笔记 2023年5月14日 (2).pdf

算法(第4版) 笔记 Page 47.pdf

算法(第4版).[美]Robert Sedgewick 笔记: 第47页,有一个很有意思的算法,用递归实现了2个10进制的加法转变为1个10进制和1个2进制的各位乘积的加法。 1 #!/usr/bin/env python3 2 #coding=utf-8 3 ################################################ 4 # File ...

huaxin820518的博客 479

算法笔记高清_胡凡曾磊pdf

算法笔记,适合初学者参加研究生计算机上机复试,以及PAT甲级乙级考试

算法笔记pdf.rar

此资源包含的是算法笔记的pdf版本,旨在提供给有需要的人!

【免费下载】 算法笔记-胡凡-两本完整PDF

算法笔记-胡凡-两本完整PDF 【下载地址】算法笔记-胡凡-两本完整PDF 本资源提供《算法笔记》及其配套的《算法笔记上机训练实战指南》的完整PDF版本。这两本书由胡凡编写,旨在帮助读者深入理解算法和数据结构,并通过实际编程练习提升应用能力 ...

gitblog_06544的博客 3430

《算法笔记》pdf版,欢迎下载学习~

各位是否还在因为CSP分数不够高而忧愁吗,《算法笔记》将会帮助你渡过CSP难关,保底200+,上限500!

左程云老师算法讲解笔记【009单链表反转】

图解链表反转

qq_37685626的博客 416

Sinutrain下载安装与开启OPC UA---kalrry

Sinutrain 开启 OPC UA 本教程只适用于版本,其他版本配置目录有所改变建议安装到默认路径,否则后期修改路径时候容易忽略细节本教程提供安装包为官方包,网上有些非官方包安装后容易出现授权问题,比如授权管理器无法启动,官方技术会建议你重装系统,很多时候是因为安装包非官方包在首次安装前,建议重启一遍系统。

kalrry 1万+

ORB-SLAM3复现的详细过程——配置安装及ROS和脚本运行---Ubuntu20.04

所提供的图像具有高动态范围,事先进行了光度标定,用20Hz的帧率采集,分辨率为1024像素*1024像素;需要下载数据集dataset-room1_512_16和rgbd_dataset_freiburg1_desk。在一键安装ROS后,只需要再安装Pangolin即可,其他所有的需要都已经存在。用微型飞行器采集的视觉惯性数据集,包含双目相机和IMU同步测量数据及位姿的真值。第二条命令中的${ROS_PACKAGE_PATH}是自己文件的路径。其采用的相机和IMU传感器,在硬件上进行了时间同步。

琉璃轻纱的博客 1万+

[算法学习笔记] 《Hello算法》第4章 数组与链表

本系列为《Hello算法》学习笔记,仅供学习,不做商用,如有侵权,联系我删除即可!数组(array)是一种线性数据结构,其将相同类型的元素存储在连续的内存空间中。我们将元素在数组中的位置称为该元素的索引(index)。下图展示了数组的主要概念和存储方式。数组的两种初始化方式:无初始值、给定初始值。在未指定初始值的情况下,大多数编程语言会将数组元素初始化为 0 : 2. 访问元素 数组元素被存储在连续的内存空间中,这意味着计算数组元素的内存地址非常容易。给定数组内存地址(首元素内存地址)和某个元素的

努力学习 1372

STM32G070xx将Flash页分块方式存储,固定数据块存储,实现一次擦除多次写入

本例程使用STM32G070xx芯片,Flash大小128KB,Flash每页(2048字节)写满后再擦除。操作存储区分为64块,每块32字节,即写满64次擦除一次;标定存储区分为16块,每块128字节,即写满16次擦除一次,每个存储区的块都有各自的头部标记

RaphaelCeo的博客 1545

【算法笔记】有人看海,有人被爱,有人做不出 leetcode 第一题(链表专题)

链表理论基础、移除链表元素、设计链表、反转链表、两两交换链表中的节点、删除链表中的倒数第 n 个数、链表相交、环形链表Ⅱ

OuO-1 的博客 1254

算法-基于MACD的Adaboost股价涨跌预测模型

MACD是一个指标,具体用法是MACD>0看涨,反之看跌,果真是这样的吗?由于所有的技术指标都基于对历史数据的统计,指标的滞后性也就难免,有时候MACD明明大于0,股价仍然跌,有时候macd小于0,股价仍然涨。 本文基于Adaboost算法提出了一种基于macd的线性阀值分类器作为若分类器,通过在限定的解空间内寻找使得错误率最小的阀值和偏置,这样做避免了训练若分类器的复杂性,经验证,这种方法有效。

mtaxot的博客 8023

DCN交换机通过boot模式升级

LIC导入成功后,输入enable进入特权模式,把网线接到通讯网口上,配置好对应interface vlan地址,在enable模式用 copy tftp://x.x.x.x/xxxxxx_nos.img nos.img待提示write ok时,reload设备完成升级。交换机启动后,在显示以下信息时输入“Ctrl+B”,一定得是手动按“Ctrl+B”进入的boot模式才能正常升级。升级交换机成功,在BootROM模式下,执行命令run或reboot,回到CLI配置界面。# 交换机通过boot模式升级。

m0_72501865的博客 946

(习题笔记)C++算法竞赛语法基础:结构体,类,指针,引用,链表

我算法属实是一个小白,现在入门,意外发现这里很方便记笔记,就将自己的学习笔记放了上来,方便随时随地复习。现在发现还可以督促我学习哈哈哈,希望大家多多指教啦~,有什么好的学习方法大佬们若愿指点一二,hong感激不尽!算法真的感觉难,链表一道题我都要想好久,做不出再看讲解,然后自己再理解,虽道阻且长,但还是勇往直前吧!注:这里收录的是我做不出、做错之类的我自己需要回顾的题目。

honghong______的博客 1678

WindowsServer2022蓝牙音频开启方法

为Windowsserver 2022 添加蓝牙音频驱动的方法和工具

thebestismin的专栏 2704

《算法笔记》链表

目录动态链表的操作(增删改查)静态链表 动态链表的操作(增删改查) 链表一般是带头结点的链表,头结点并没有数据; 遍历链表时,先令p = head - > next,,只要p非空,就可以一直循环; 删除链表元素时,需要两个指针,一个指向将要删除的元素,另一个指向删除元素的前驱; 增加元素时,要先找到目标元素,然后新建一个节点,在这个目标元素的后面加上新建节点 #include <io...

hjyp的博客 201

SAP_MM&FI模块-质保金标准解决方案详解

主要讲述了SAP系统质保金的标准实现方案,包含业务背景、后台配置、前台业务操作记录,以及关键点的AI解释;

风沙的博客 684

innovus中如何设置cts参数

上面是设置cts的一般设置,如果需要对某些skew group或者某些clock tree设置不一样的参数,如需要对clk1这个clock设置不一样的inverter,可以使用。需要查询已经设置过的ccopt参数,可以使用get_ccopt_property去查询,方法和set_ccopt_property一致。言归正传,cts的设置命令是set_ccopt_property,获取命令是get_ccopt_property。另外,set_ccopt_property提供一套命令查询方法。

芯冰乐 544

算法笔记——链表

基本操作 创建链表:尾插法和头插法 尾插法 #include<iostream> #include<stdio.h> using namespace std; struct node { int data; node *next; }; //尾插法创建链表 node * create(int Array[]) { node *head = n...

weixin_44698281的博客 255

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

《算法笔记》——链表

链表一.链表的概念二. 使用malloc 函数或者new 运算符为链表结点分配内存空间2.1 malloc2.2 new运算符2.3 内存泄漏三.链表的基本操作3.1 创建链表3.2 查找元素 一.链表的概念 1.链表由若干个结点组成(每个结点代表一个元素),且结点在内存中的存储位置通常是不连续的。 2.链表的两个结点之间一般通过一个指针来从一个结点指向另一个结点,因此链表的结点一般由两部分构成,即数据域和指针域。数据域存放结点要存储的数据,指针域指向下一个结点的地址。这样就会产生从某个结点开始的,由指针连

Concise200的博客 330

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

算法课程笔记——基础数据结构-链表、栈、队列

算法课程笔记——基础数据结构-链表、栈、队列。

2302_79123319的博客 323

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【算法笔记】链表

203. 移除链表元素 链表删除:对于单结点,需要找到删除结点的上一个结点,由于头结点没有上一个结点,可以采取以下两种方法。 1.对头结点特殊处理 ListNode* removeElements(ListNode* head, int val) { while(head!=nullptr&& head->val==val){ ListNode* temp=head; head=head->next;

computs的博客 690
上一篇: 随笔:实现一个队列,使得取出最大值的时间复杂度较低
下一篇: 顺时针打印数字矩阵
KeepThinking_
博客等级 码龄15年 50粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值