算法面试题链表汇总

1、在一次遍历中,怎样发现单个链表的中间元素? (两指针)

2、怎样验证给定的链表是环形的? 怎样发现这个环的起始节点?

3、怎样翻转链表?

4、不使用递归,怎样反转单个链表?

5、在未排序链表中,怎样移除重复的节点?

6、怎样找出单个链表的长度?

7、从单个链表的结尾处,怎样找出链表的第三个节点? ()两指针)

8、怎样使用栈计算两个链表的和?

1、O(1)时间删除链表节点
题目:给定一个链表和一个节点指针,在O(1)时间删除该节点。
方法:狸猫换太子,用后一个节点数据覆盖要删除的节点,然后删除下一个节点。
解答:leetcode 237. Delete Node in a Linked List(删除链表中的特定节点)

2、单链表反转
题目:输入一个单项链表,输出逆序反转后的链表。
方法:pre, cur, next 三指针循环一遍即可。 或者递归方法(不容易想到)
解答 leetcode 206. Reverse Linked List (翻转一个链表)
【剑指offer】 面试题24 反转链表

3、求链表倒数第k个节点
题目:输入一个单向链表,输出该链表中倒数第k个节点。
分析: 双指针法,设置p1,p2两个指针,首先p1移动k-1个点,然后p2和p1再一起移动,直到p1到达链表尾部,p2刚好是链表的倒数第k个节点。
【剑指offer】 面试题22 链表中倒数第k个结点

4、 判断单链表是否有环
题目:输入一个单链表判断是否有环存在
分析:快慢指针法,从头出发,快指针一次走两步,慢指针一次走一步,如果存在环,那么快慢指针一定在某一时刻相遇。
解答:leetcode141 Linked List Cycle(判断链表是否有环)

5、找到环的入口节点
题目:输入一个单链表判断是否有环存在,如果存在环,如何找到环的入口节点。
分析:快慢指针法,从头出发,快指针一次走两步,慢指针一次走一步,如果存在环,那么快慢指针一定在某一时刻相遇。接下来,让p1回到链表的头部重新走,每次走一步,当p1,p2再次相遇的时候,则就是入口节点。
【剑指offer】 面试题23 链表中环的入口节点

6、两个链表相交的第一个公共节点
题目:如果两个没有环的链表相交,怎么求出他们相交的第一个节点?
分析:采用对齐的思想,把两个单链表互相拼接成同样长度的链表即l1+l2 和 l2+l1,然后从头用指针p1,p2分别遍历,p1=p2时找到。

解答:leetcode160. Intersection of Two Linked Lists(寻找两个链表的交叉点)
【剑指offer】面试题52 链表的公共节点

7、合并两个有序链表
题目:给定两个排好序的链表,对两个链表进行合并
分析:递归和迭代两种方法分别给出。可以用两个指针分别指向两个链表,比较每一次节点值得大小。
解答:leetcode 21 Merge Two Sorted Lists (合并两个有序链表迭代)
【剑指offer】 面试题25 合并两个排好序的链表–递归

8、删除链表中的重复节点
题目:输入的单链表中有一些重复节点,请对他们进行删除
分析:根据问题1,可以进行狸猫换太子删除法如leetcode83,也可以进行传统的删除方法可以参见剑指offer18,对比理解。
【剑指offer】 面试题18 删除链表中的重复节点
解答:leetcode83. Remove Duplicates from Sorted List(删除有序链表中的重复项)
————————————————
版权声明:本文为CSDN博主「小白的进阶之路」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37466121/article/details/88204678

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值