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

在单链表的第i个位置后插入一个节点(阿里+腾讯等面试题总结)

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

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

    【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

    12310

    找出链表中倒数第K个节点

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

    69020

    获取链表中倒数第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

    49520

    在顺序表第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) ---- 作者:谭奇 主编:欧洋

    25920

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

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

    26410

    面试题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为空。

    27731

    《剑指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;ii++){ if(head.next!

    37130

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

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

    30620

    链表-链表中倒数第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) {

    17020

    删除链表中倒数第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;ii++) { head=head->next; //先把head向后移动n个位置

    41420

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

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

    46810
    领券