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

链表i位置插入节点(阿里+腾讯等面试题总结)

时间:2014.04.26 地点:基地 ————————————————————————— 一、题目 题目是非常easy和基础,就是链表i位置插入节点。要求写代码,5分钟之内完毕。...————————————————————————— 二、分析 1.先依照一般的步骤,我们要得到链表i位置的指针。...个位置的指针写了两版本号,即为提供通用性,当然这里对于题目要求的是多余的,由于题目要求是肯定要通过指针改动链表。...链表的实现中比方还可提炼几种编码规范: 1.使用cursor遍历链表指针 for(Node* head_ptr;cursor!...=nullptr;cursor=curosr->get_link()) { ....... } 2.提供两版本号的编号定位节点的函数或者匹配定位节点的函数 发布者:全栈程序员栈长,转载请注明出处

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

链表问题】删除单链表K节点

【题目描述】 链表删除倒数 K 节点。...【要求】 如果链表的长度为 N, 时间复杂度达到 O(N), 额外空间复杂度达到 O(1) 【难度】 士 【解答】 删除的时候会出现三种情况: 1、不存在倒数 K 节点,此时不用删除。...2、倒数 K 节点就是第一节点。 3、倒数 K 节点在第一节点之后。 所以我们可以用一变量 num 记录链表一共有多少节点。 如果 num < K,则属于第一种情况。...如果 num == K,则属于第二情况。 如果 num > K, 则属于第三种情况,此时删除倒数 K 节点等价于删除 (num - k + 1) 节点。...this.value = data; } } //删除K节点 public Node removeLastKthNode(Node head, int K) { if(head

1.7K10

【Leetcode】移除链表元素 链表的中间节点 链表倒数k节点

【Leetcode876】链表的中间节点 1.链接:链表的中间节点 2.题目再现 3.解法:快慢指针 1.定义一快指针 fast 和一慢指针 slow 都初始化为 head; 2.遍历链表,快指针一次走...next; //fast 走2步 } slow=slow->next; //slow 走1步 } return slow; //返回慢指针 } 三.链表倒数...k节点 1.链接:链表倒数k节点 2.题目再现 3.解法 :快慢指针 1.定义一快指针 fast 和一慢指针 slow 都初始化为 head; 2.因为倒数k节点和尾节点的差为 k-...1 ,所以我们先让快指针先走 k-1 步; 或者因为尾节点所指向的NULL 和倒数k节点相差k,也可以先让快指针走k步; 这个时候慢指针不动; 3.快指针走完后,快指针和慢指针依次走,每次只走...演示: 链表倒数K节点 快慢指针动态演示 代码: struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) { if

9910

找出链表倒数K节点

今天来看一道有意思的链表算法题目。 给到一单向链表,要求找出该链表倒数 k 节点,要求只能遍历一次链表,且空间复杂度为 O(1)。...思路2:先遍历一遍该单链表,获取链表的总节点数 n,那么 n-k+1 这个节点就是倒数 k 节点。所以第二次再遍历到 n-k+1 这个节点即可,但是题目要求只能遍历一遍链表。...思路3:通过遍历该链表节点都存入到一数组,然后再通过数组下标可直接获取到倒数 k 节点,但是这样会需要额外的存储空间,空间复杂度为 O(n)。...当前指针遍历到 k 节点时,后指针也指向链表头指针并开始遍历,在这之后,前指针每往后遍历一节点,后指针也往后遍历一节点。...比如头指针不能为空,k 不能等于 0,k 不能大于链表的总节点数。这些都是需要我们代码中考虑到的情况,下面附上一份用 python 实现该算法的代码。

66620

获取链表倒数K节点

前言 给定一单向链表的头节点,如何获取该链表倒数K节点(从1开始计数)?本文将带着大家一起解决这个问题,欢迎各位感兴趣的开发者阅读本文。...小程序阅读 为了更好的阅读体验,你可以点击下方小程序来阅读本文。...也就是说,我们需要遍历链表两次,第一次计算出链表节点的个数,第二次就能获取倒数K节点,如下图所示: 1次遍历链表拿到了链表的长度n=6 2次遍历链表获取到了倒数3节点处(6-3+1)的值9...由于两指针的距离始终保持k-1,当第一指针到达链表的尾节点时,第二指针正好指向倒数k节点 IMG_596AE88489E9-1 2 实现代码 通过上面的分析,我们知道了如何用双指针的思路,...{ throw new Error("需要获取的倒数节点数必须大于0"); } // p1指针先走,将其指向链表的k-1位置 for (let i = 0; i

47820

顺序表2位置插入特殊符号

引言 我们平时学习的时候,我们常常学习了一东西后而不去复习,就导致我们学习过的东西就在后面慢慢的忘记了。所以今天我要写一平时学习过的一知识点。...1 问题 我们要在顺序表的第二位置插入特殊的表情“( ̄y▽ ̄)~*捂嘴偷笑”。...2 方法 首先,我们需要生成一值为None的顺序表, 然后我们需要把第二位置及第二位置后面的所以元素全部向后面移动一位置, 最后第二位置插入特殊表情“( ̄y▽ ̄)~*捂嘴偷笑”。...e): for j in range(self.size-2,i-2,-1): # 要考虑溢出的问题 self.data[j+1] = self.data[j] self.data[i-...在这个过程我们一定要考虑溢出的及下标填入位置的相关问题,除此以外对于学习过的东西还需要多多的复习。 稿件来源:深度学习与文旅应用实验室(DLETA) ---- 作者:谭奇 主编:欧洋

24120

面试题22: 链表倒数k节点

Kingsley Ward 面试题22:链表倒数k节点 输入一链表,输出该链表倒数k节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数1节点。...例如,一链表有6节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数3节点是值为4的节点。...解题思路 两次遍历: 一次求节点个数n,一次走 n-k+1 步 单链表是单向,所以只能顺着数,但是如果要找到倒数 k 节点,其实就是顺着数 n - k + 1 节点。...k节点 return second 递归递归往下走,同时增加一count来记录递的次数,并把结果记录在res,当到达k节点时,直接返回head class Solution...对k进行减一,当k==0,说明到达k节点,返回head,不然将继续进行下去,直到head为空。

24631

剑指Offer(十四)--链表倒数k节点

题目描述 思路以及解析 题目描述 输入一链表,输出该链表倒数k结点。...思路以及解析 如果按照直观的做法,就是先走到链表的尾部,再回溯k步,这样就能找到这个节点,可问题是这个链表其实是单向链表。要回溯的话,就需要遍历两次。...第一次遍历的时候记录下链表节点个数n,第二次遍历的时候应该遍历到n-k-1节点就可以啦。这样代码实现其实不难。 但是有没有更优的做法呢? 答案肯定是有的!!!...思路也比较清晰,那就是前后指针,先让1指针先走k步,然后2指针开始走,而且两指针一起走,直到第一指针走到最后的位置。...当第一指针走到最后的位置的时候,其实第二指针停留的位置就是倒数k节点。 这种双指针的方式,其实还是蛮常见的,可以加深印象。

24910

《剑指offer》– 链表倒数k节点、反转链表、合并两排序的链表

一、链表倒数时k节点: 1、题目: 输入一链表,输出该链表倒数k结点。 2、解题思路:单链表具有单向移动的特性。...(1)第一种:先遍历链表,算出链表节点数count,第二次直接遍历到count-k节点。但是要注意,可能链表节点数count小于k,此时要返回NULL,所以要先判断这个条件。...(这一种就不贴代码出来了) (2)第二种: 可以用两指针,一指针遍历到k结点的时候,第二指针再走到第一节点,然后两指针的距离始终保持k-1,这样,当第一指针的next==NULL,也就是走到最后一节点的时候...,第二指针对应的位置,就是倒数k结点。...k-1节点 for(int i=0;i<k-1;i++){ if(head.next!

35830

《剑指offer》11.链表倒数k节点

题目 输入一链表,输出该链表倒数k结点。 思路 ? 简单思路: 循环到链表末尾找到 length 找到length-k节点 需要循环两次。...优化:设定两节点,间距相差k节点,当前面的节点到达终点,取后面的节点。 前面的节点到达k后,后面的节点才出发。...、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针链接次序实现的。...链表由一系列结点(链表每一元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两部分:一是存储数据元素的数据域,另一是存储下一结点地址的指针域。 相比于线性表顺序结构,操作复杂。...由于不必须按顺序存储,链表插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn

29620

链表-链表倒数k节点

题目 输入一链表,输出该链表倒数k节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数1节点。例如,一链表有6节点,从头节点开始,它们的值依次是1、2、3、4、5、6。...这个链表的倒数3节点是值为4的节点。 难易程度:easy 示例 1: 给定一链表: 1->2->3->4->5, 和 k = 2. 返回链表 4->5....题解 分析 本题典型的双指针题目: 设指针rp、lp都指向head, rp先走k步 rp、lp 同步移动 到rp指向链表尾后NULL的时候,lp即是倒数k节点 时间复杂度:O(N) 空间复杂度:O(...lp->next; } } return lp; } }; 上述算法,可以进一步优化,rp只先走k-1步,最后rp指向链表的最后一节点...= NULL) { rp = rp->next;// 结束时,rp是最后一节点,而非NULL if (k > 1) {

15620

删除链表倒数n节点双指针

给定一链表,删除链表倒数n节点,返回链表的头节点。 样例 给出链表1->2->3->4->5->null和 n = 2....删除倒数第二节点之后,这个链表将变成1->2->3->5->null. **166. 链表倒数n节点 **也是这个思路。...双指针 从后往前删除n节点,如果是数组,那么可以从后往前找到n然后删除就行了,双向指针也可这么做,双向链表的话也可以从后往前,但是单向链表要注意的是只能从前向后遍历,一旦越过这个节点,就找不到了...,这个时候del刚好指向要删除节点的前一节点(这是必要的,del不能指向要删除的节点,因为链表的删除是必须前一节点的),这个时候删除这个节点就行了。...for(int i=0;i<n;i++) { head=head->next; //先把head向后移动n个位置

38820

LeetCode-19 删除链表的倒数N节点

删除链表的倒数N节点 > 难度:中等 > 分类:链表 > 解决方案:双指针 今天我们学习19题删除链表的倒数N节点,这是一道中等题。这个题属于面试的高频题,一定要能手写出来。...题目描述 给定一链表,删除链表的倒数 n节点,并且返回链表的头结点。...这个题让我们删除链表的倒数 n节点,并且返回头节点。题目中说明部分提到给定的 n保证是有效的,因此 n的值小于等于链表的长度。...最基本的方法,我们可以先遍历一次链表,统计链表的长度 len,则删除的节点位置为 len-n+1。然后找到删除节点位置的前一节点(位置为 len-n)对节点进行删除即可。...// 重置p指针的位置 p = head; // 查找需要删除节点的前一节点 for(int i=1; i<pos-1; i++){

44910
领券