算法面试题(数据结构)

第二次

面试题
一、
长度为n的链表 求倒数第k 个结点

  1. 两次遍历
    先求出n的值(用一个循环)
    然后求n-k

  2. 一次遍历 双指针
    同一个位置开始 间隔k-1
    当其中一个指针指到最后一个时,另一个就是所求

二、(进一步延伸)
123456 -》 561234
将指向最后一个结点的指针指向第一个结点,成为循环链表,然后再断开链表 断开之前要获取到5的结点

第三次

数组:逆置 回文
容器 (列表 字典 集合)

  1. 求单链表中循环链表中的入环结点
    1.用集合 第一个出现两次的结点就是入环结点 缺点:借助了额外的存储空间
    2.快慢指针:准备两个指针,当指针相遇后,快指针回到起点,慢指针不变,快指针改为每次走一步,当两个指针再次相遇时,这个结点就是入环结点

  2. 判断两个单链表是否相交
    六种情况,先判断是否有环(快慢指针)
    在这里插入图片描述

    1. 都是无环单链表(第一种和第二种):,只需找到两个链表的尾节点(无环单链表如果相交,必然会有相同的尾节点)
      2.(第五种情况)如果一个有环,一个无环,则肯定不相交
      3.(第三种):有共同的入环结点
      4.(第四种 第六种):先找到两个入环结点,然后用快慢指针,慢指针绕圈一周,如果与快指针相遇,则处于同一个环,否则处于不同的环
  3. 两个无环单链表相交,找到相交结点

    1. 借助容器 集合
    2. 双指针:匀速指针,如果相遇则是相交结点,若没有相遇则在指到null后交换指针从头开始,相遇时则为相交结点(最多交换一次),原理:两者走的距离相同
      这个方法也可以用来判断两个链表是否相交,如果不相交则返回null,相交则返回相交结点
  4. 判断一个单链表是否是回文链表
    1.借助容器 数组 ,若数组是回文数组,则链表也为回文链表
    2.遍历一遍后,得到链表结点个数,进而遍历得到倒数结点
    3.递归:

** 2020年10月20日17:29:20 **

  1. 当n远远大于m的时候,求倒数第m个元素
  2. 维护一个容量为M的小根堆(小-》大 优先队列):

先依次扫描,建立大小为M小根堆,当扫描够m个之后,只需要和根节点比较,然后继续进行siftdown操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值