首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

链表问题】删除链表第K个节点

前言 以专题形式更新刷题贴,欢迎跟我一起学习刷题。每道题会提供简单解答。 【题目描述】 在链表删除倒数第 K 个节点。...【要求】 如果链表长度为 N, 时间复杂度达到 O(N), 额外空间复杂度达到 O(1) 【难度】 士 【解答】 删除时候会出现三种情况: 1、不存在倒数第 K 个节点,此时不用删除。...2、倒数第 K 个节点就是第一个节点。 3、倒数第 K 个节点在第一个节点之后。 所以我们可以用一个变量 num 记录链表一共有多少个节点。 如果 num < K,则属于第一种情况。...如果 num == K,则属于第二情况。 如果 num > K, 则属于第三种情况,此时删除倒数第 K 个节点等价于删除第 (num - k + 1) 个节点。...(num-k+1)个节点 //定位到这个点前驱 while (num - K !

1.7K10
您找到你想要的搜索结果了吗?
是的
没有找到

用O(1)时间复杂度删除链表某个节点

给定链表头指针和一个结点指针,在O(1)时间删除该结点。...链表结点定义如下: struct ListNode { int m_nKey; ListNode* m_pNext; }; 函数声明如下: void DeleteNode...一般链表删除某个节点,需要知道删除节点前一个节点,则需要O(n)遍历时间,显然常规思路是不行。...可见,该方法可行,但如果待删除节点为最后一个节点,则不能按照以上思路,没有办法,只能按照常规方法遍历,时间复杂度为O(n),是不是不符合题目要求呢?...其实我们分析一下,仍然是满足题目要求,如果删除节点为前面的n-1个节点,则时间复杂度为O(1),只有删除节点为最后一个时,时间复杂度才为O(n),所以平均时间复杂度为:(O(1) * (n-1) +

79880

华为机试 HJ48-单向链表删除指定值节点

华为机试 HJ48-单向链表删除指定值节点 题目描述: HJ48 单向链表删除指定值节点 https://www.nowcoder.com/practice/f96cd47e812842269058d483a11ced4f...描述 输入一个单向链表和一个节点值,单向链表删除等于该值节点删除后如果链表节点则返回空指针。...>5->4 最后链表顺序为 2 7 3 1 5 4 最后一个参数为2,表示要删掉节点为2删除 结点 2 则结果为 7 3 1 5 4 数据范围:...2 输入头结点值 3 按照格式插入各个结点 4 输入要删除结点值 输出描述: 输出一行 输出删除结点后序列,每个数后都要加空格 示例...list一些方法做查找、插入、删除等操作,C++可以使用STLlist类。

1.6K40

Java script函数使用方法

前言 什么是函数,就是把一段相对独立具有特定功能代码块封装起来,形成一个独立实体,就是函数,起个名字(函数名),在开发可以反复调用,函数作用就是封装一段代码,可以重复使用。 1....var 变量 = 函数名(实参1, 实参2, 实参3); 返回值详解: 如果函数没有显示使用 return语句 ,那么函数有默认返回值:undefined 如果函数使用 return语句,那么跟在...return后面的值,就成了函数返回值 如果函数使用 return语句,但是return后面没有任何值,那么函数返回值也是:undefined 函数使用return语句后,这个函数会在执行完 return...作业: 求1-n之间所有数和 求n-m之间所有数和 求2个数最大值 1.4 函数相关其它事情 1.4.1 匿名函数与自调用函数 匿名函数:没有名字函数 匿名函数如何使用: 将匿名函数赋值给一个变量...因为函数是一种类型,所以可以把函数可以作为返回值函数内部返回。

98600

javaIterable接口使用,实现一个链表迭代器

链表实现: public class MyLinkedList { private static class Entry{ private E value;...iterator()返回值会返回一个迭代器对象,这个迭代器对象可以作为一个工具来遍历集合类对象。...此外,迭代器更是设计模式,如对图遍历可以实现一个图迭代器,简化代码,将遍历思想抽象出来。 自己实现一个可以遍历上述链表迭代器,这个迭代器需要实现Iterator接口中方法。...主要包括以下三个方法: (1)是否存在下一个对象元素 (2)返回下一个对象元素 (3)删除集合的当前迭代器指向对象元素 public class MyLinkedList ...show()方法功能是相同,但是迭代器为遍历集合对象元素提供了一种统一方法,此外也可以使用迭代器做更多事情。

54310

原理到实践:学习JavaOutputStreamWriter使用方法

然后可以使用OutputStreamWriter对象write方法将字符写入到输出流。...代码可以看出,OutputStreamWriter类定义了一个StreamEncoder类型私有变量se,它是OutputStreamWriter核心部分,负责将字符流转换成字节流。...在构造函数,我们可以看到StreamEncoder.forOutputStreamWriter()方法调用,这个方法返回了一个StreamEncoder实例。...兼容Writer类所有方法使用起来非常方便。  当然,OutputStreamWriter类也有一些缺点:对于一些复杂字符集转换,可能会有性能问题。...String getEncoding(): 返回此流使用字符编码字符串表示形式。void flush(): 刷新该流缓冲区。void write(int c): 写入单个字符。

33191

Java构造函数、setget方法和toString方法使用及注意事项

参考链接: 可以重写Java私有方法吗 一、构造函数 构造函数最大作用就是创建对象时完成初始化,当我们在new一个对象并传入参数时候,会自动调用构造函数并完成参数初始化。...3.如果只写了有参数构造函数,且不存在无参数构造函数,将不能以 new XXX(); 这样方式实例化对象,在实例化对象代码,new XXX("***"); 括号参数必须与构造函数参数保持一致...所以,比较稳妥也是较常用方式是在java同时定义无参构造函数和有参构造函数,代码如下: public class Test01 {     private String name;     //有参构造函数...然后我们来了解一下JAVA面向对象编程封闭性和安全性。封闭性即对类域变量进行封闭操作,即用private来修饰他们,如此一来其他类则不能对该变量访问。...,这就是重写toString()在java基本用法了。

1.8K20

疯狂java笔记之线性表

初始化:通常是一个构造器,用于创建一个空线性表 返回线性表长度:该方法用于返回线性表数据元素 获取指定索引元素:根据索引返回线性表数据元素 按值查找数据元素位置:如果线性表存在一个或多个与查找值相等数据元素...对于链表而言,常用操作有: 查找 插入 删除 1.查找操作 链表查找操作可以分为以下两种: 按序号查找第index个节点:header节点依次向下在链表查找第index个节点口算法为,设header...向i索引插入节点示意图。 ? insert_linked.PNG 3.删除操作 删除操作是将链表第index个节点删去。...因为在链表,第index个节点是有index-1节点引用,因此删除index节点将先获取index-1节点,然后index-1节点next引用到原index+1节点,并释放index...双向链表查找 由于双向链表既可以header节点开始依次向后搜索每个节点,也可以tail节点开始依次向前搜索每个节点,因此当程序试图双向链表搜索指定索引节点时,既可以链表header

57120

自己动手写一个链表

一、概述 单向链表链表)是链表一种,其特点是链表链接方向是单向,对链表访问要通过顺序读取从头部开始。 链式存储结构线性表将采用一组任意存储单元存放线性表数据元素。...由于不需要按顺序存储,链表在插入、删除数据元素时比顺序存储要快,但是在查找一个节点时则要比顺序存储要慢 使用链式存储可以克服顺序线性表需要预先知道数据大小缺点,链表结构可以充分利用内存空间,实现灵活内存动态管理...首先要先找到索引为index-1节点,然后生成一个数据为element节点newNode,并令index-1节点next指向新节点,新节点next指向原来index节点。...[这里写图片描述] 三、单向链表Java实现 下面的程序分别实现了线性表初始化、获取线性表长度、获取指定索引元素、根据值查找、插入、删除、清空等操作。...删除链表重复节点 /** * 删除重复节点 */ public void deleteDuplecate(Node head) { Node p = head

71161

链表实例解析参考

一、概述 单向链表链表)是链表一种,其特点是链表链接方向是单向,对链表访问要通过顺序读取从头部开始。 链式存储结构线性表将采用一组任意存储单元存放线性表数据元素。...由于不需要按顺序存储,链表在插入、删除数据元素时比顺序存储要快,但是在查找一个节点时则要比顺序存储要慢 使用链式存储可以克服顺序线性表需要预先知道数据大小缺点,链表结构可以充分利用内存空间,实现灵活内存动态管理...首先要先找到索引为index-1节点,然后生成一个数据为element节点newNode,并令index-1节点next指向新节点,新节点next指向原来index节点。 ...添加描述 三、单向链表Java实现 下面的程序分别实现了线性表初始化、获取线性表长度、获取指定索引元素、根据值查找、插入、删除、清空等操作。...删除链表重复节点 /** * 删除重复节点 */ public void deleteDuplecate(Node head) { Node p = head

48420

“365算法每日学计划”:04打卡-自己动手写一个链表

一、概述 单向链表链表)是链表一种,其特点是链表链接方向是单向,对链表访问要通过顺序读取从头部开始。 链式存储结构线性表将采用一组任意存储单元存放线性表数据元素。...由于不需要按顺序存储,链表在插入、删除数据元素时比顺序存储要快,但是在查找一个节点时则要比顺序存储要慢 使用链式存储可以克服顺序线性表需要预先知道数据大小缺点,链表结构可以充分利用内存空间,实现灵活内存动态管理...首先要先找到索引为index-1节点,然后生成一个数据为element节点newNode,并令index-1节点next指向新节点,新节点next指向原来index节点。 ?...这里写图片描述 三、单向链表Java实现 下面的程序分别实现了线性表初始化、获取线性表长度、获取指定索引元素、根据值查找、插入、删除、清空等操作。...删除链表重复节点 /** * 删除重复节点 */ public void deleteDuplecate(Node head) { Node p = head

47130

理解JavaScript数据结构(链表)

我们知道,数组元素以索引编号和顺序存储在数据库: 321610011716_.pic.jpg 在使用数组时,在开始或特定索引添加/删除元素这样操作可能是一项性能较低任务,因为我们必须移动所有其他元素索引...由于在对象,元素存储位置是随机,因此,在执行诸如在开始或特定索引添加/删除元素之类操作时,无需移动元素索引: 341610011761_.pic.jpg 尽管在对象添加和删除元素速度很快,...指针指向列表下一个节点,最后一个节点指针指向null,上图是一个链表 ?。 链表和对象时有很大不同。 在链表,每个节点都通过指针(pointer)连接到下一个节点。...remove (删除特定索引元素) 实现了插入操作之后,删除操作就比较容易理解,因为它几乎与插入操作相同,当我们getPrevNextNodes函数获取prevNode和nextNode值时,我们必须在...反向运算复杂度为O(n)。 查找 (查找特定索引值) 这个操作很简单,我们只是遍历链表并返回特定索引节点。这个操作复杂度也是O(n)。

1.2K10

Java提高十八】Map接口集合详解

,如果有冲突,则使用散列链表形式将所有相同哈希地址元素串起来,可能通过查看HashMap.Entry源码它是一个链表结构。...put方法整个处理流程是:计算keyhash值,根据hash值获得key在table数组索引位置,然后迭代该keyEntry链表(我们暂且理解为链表),若该链表存在一个这个key对象,那么就直接替换其...Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差,LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项前后项即可...由于哈希映射采用是数组结果,那么必然存在一用于确定任意键访问数组索引机制,该机制能够提供一个小于数组大小整数,我们将该机制称之为哈希函数。...当我使用较小负载因子时,虽然降低了冲突可能性,使得单个链表长度减小了,加快了访问和更新速度,但是它占用了更多控件,使得数组大部分控件没有得到利用,元素分布比较稀疏,同时由于Map频繁调整大小

1K60

线性表及ArrayListLinkedList源码分析总结

链表结构有两大特点:   ①用一组任意储存单元储存线性表数据元素,这组储存单元可以是连续,也可以是不连续。这就意味着,这些数据元素可以存在内存任意未被占用位置。   ...由于这个算法时间复杂度取决于i位置,最坏情况就是O(n),即元素在末尾。   由于链表没有定义表长,所以我们没有办法使用for循环来查找。...链表删除与插入.png 我们用“.next”表示一个节点后继指针,X.next = Y表示将X后继指针指向Y节点。...双链表删除.png 如图,我们假设在一个双向链表中有一个节点X,他前继节点是prev,后继节点是next.现在我们展示删除节点X源码(sources/ansroid-24/java/util/LinkedList...node()方法我们之前讲过,二分法查找索引元素 pred = succ.prev; //前继引用指向原链表索引元素前一个元素,完成插入 }

59040

Java集合深度解析之LinkedList

LinkedList简介 LinkedList是基于双向循环链表源码可以很容易看出)实现,除了可以当做链表来操作外,它还可以当做栈、队列和双端队列来使用。...开始向后查找,删除第一个值为元素(o)节点 // 链表开始查找,如存在节点值为元素(o)节点,则删除节点 public boolean removeFirstOccurrence...无参构造方法直接建立一个仅包含head节点链表,包含Collection构造方法,先调用无参构造方法建立一个空链表,而后将Collection数据加入到链表尾部后面。...4、LinkedList是基于链表实现,因此不存在容量不足问题,所以这里没有扩容方法。 5、注意源码Entryentry(int index)方法。...该方法返回双向链表中指定位置节点,而链表是没有下标索引,要指定位置出元素,就要遍历该链表源码实现,我们看到这里有一个加速动作。

1.2K50
领券