随笔分类 - Java剑指Offer
摘要:题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 思路一 迭代遍历链表,利用HashSet将每个结点添加到哈希表中,如果添加失败(重复遍历了这个结点即遇到环),输出该结点为环入口 实现 运行时间:17ms 占用内存:9608k 思路二 使用双指针,一个指针 fas
阅读全文
摘要:题目描述: 输入两个链表,找出它们的第一个公共结点。 思路一: 设 A 的长度为 a + c,B 的长度为 b + c,其中 c 为尾部公共部分长度,可知 a + c + b = b + c + a。 当访问链表 A 的指针访问到链表尾部时,令它从链表 B 的头部重新开始访问链表 B;同样地,当访问
阅读全文
摘要:题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 注意要求: 1. 排序的链表:说明如果有重复的结点他们是连续存在的 2. 重复的结点不保留 思路一 使用递归法进行删
阅读全文
摘要:题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 思路 第一步,在每个节点的后面插入复制的节点。 第二步,对复制节点的 ra
阅读全文
摘要:题目描述 输入一个链表,输出该链表中倒数第k个结点。 注意: 该题目不可以用先反转链表再输出第k个结点的方式,因为反转链表会改变该结点的next指向 思路一 使用栈Stack倒序存储,顺序pop第k个结点 实现 思路二 设链表的长度为 N,寻找第n-k个节点即为第k个结点 设置两个指针 P1 和 P
阅读全文
摘要:题目描述 输入一个链表,反转链表后,输出新链表的表头。 思路一 使用头插法迭代进行反转 实现 思路二 递归 实现 思路参考:https://www.nowcoder.com/discuss/198840
阅读全文
摘要:题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。 解题思路 思路一:使用头插法 使用头插法可以得到一个逆序的链表。遍历链表,每次将所遍历节点插入到链表的头部。 头结点和第一个节点的区别: 头结点是在头插法中使用的一个额外节点,这个节点不存储值; 第一个节点就是链表的第一个真
阅读全文
摘要:题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 解题思路 要求时间复杂
阅读全文
摘要:题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 解题思路1 在字符串尾部填充任意字符,使得字符串的长度等于替换之后的长度。因为一个空格要替换成三个字符(%20),因此当遍历到一个
阅读全文
摘要:题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解题思路 根据排序特点,该二维数组中的一个数,小于它的数一定在其左边,大于它的数一定在其下边。
阅读全文