文章分类 - 算法-链表
摘要:删除链表中重复的结点 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1 2 3 3 4 4 5 处理后为 1 2 5 这里用到了三个辅助节点,还是比较多的 这里一个重要的思想就是构造了 辅助头节点 ,从而避免了删除头节点的问题,值得借鉴
阅读全文
摘要:链表中环的入口结点 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 使用双指针,一个快指针 fast 每次移动两个节点,一个慢指针 slow 每次移动一个节点。因为存在环,所以两个指针必定相遇在环中的某个节点上。 假设环入口节点为 y1,相遇所在节点为 z1。 假设快指针
阅读全文
摘要:孩子们的游戏(圆圈中最后剩下的数) 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m 1的那个小朋友要出列唱
阅读全文
摘要:两个链表的第一个公共结点 输入两个链表,找出它们的第一个公共结点。 要做这道题,首先一定要搞清楚,找的是“公共节点”,而不是“值相同的节点”。而 对于一个节点,如果它同时存在于两个链表上,那么就代表之后的所有节点一定也是两个链共用的! 也即如下: 这个解析的思路非常妙! 看下面的链表例子: 0 1
阅读全文
摘要:复杂链表的复制 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 用一个哈希表表示映射关系:键是原节点,值是复制的节点。 整体算法流程
阅读全文
摘要:合并两个排序的链表 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 这道题的思路还是比较重要的 基本思路如下: 新建一个节点,每次都把选下来的小的拉到这条链上。如果有一个链到末尾了,就把另外一个剩下的都接上 这个算法的好处是很简洁
阅读全文
摘要:反转链表 输入一个链表,反转链表后,输出新链表的表头。 这是比较经典的反转链表问题 解法: 以 3 个节点为例: 用 pre 记录当前节点的前一个节点 用 next 记录当前节点的后一个节点 1. 当前节点 a 不为空,进入循环,先记录 a 的下一个节点位置 next = b; 再让 a 的指针指向
阅读全文
摘要:链表中倒数第k个结点 输入一个链表,输出该链表中倒数第k个结点。 我用了一个方法,就是新建一个ArrayList存放k个元素,如果没有了就从里面找倒数第k个元素。 但有一个更好的办法,只用到了指针,不需要存储,空间复杂度是O(1)的: 快指针先往前走k步,注意判断边界,然后快慢一起走,当快指针为no
阅读全文

浙公网安备 33010602011771号