算法面试题-----链表完整刷题总结

关于面试中你一定要会的链表算法题!!

这个阶段一直在进行刷题,现在总结一下链表题的常见类型,觉得有用的朋友记得点个赞哈!让我知道自己的总结还是有帮助到一些人的,也为了让更多的人看到。整理不易,转载的话记得注明出处!

再次注意,涉及到删除操作的时候,一定要考虑空表,删除在表头,在表中等操作。

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(删除有序链表中的重复项)

下一节,我们介绍有关二叉树刷题的知识!

算法面试题—–二叉树完整刷题总结

    原文作者:小白的进阶之路
    原文地址: https://blog.csdn.net/qq_37466121/article/details/88204678
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞