数据结构 :链表
剑指offer中链表的相关问题
Stephen.zhou
这个作者很懒,什么都没留下…
展开
-
剑指offer (62)
题目 : 给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。思路 : 二叉搜索树的中序遍历就是从小到大排序,所以只要找到中序遍历的第K个节点即可;可以使用链表存储节点,要注意边界条件,K可能不是个有效值import java.util.ArrayList;import java.util.Arrays;pu...原创 2020-02-08 09:39:30 · 161 阅读 · 0 评论 -
剑指offer (56)
题目 : 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5思路 :简单 , 递归思路public class Solution { public ListNode deleteDuplication(ListNode pH...原创 2020-02-08 09:14:05 · 111 阅读 · 0 评论 -
剑指offer (55)
题目 : 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。思路 :设置快慢指针,都从链表头出发,快指针每次走两步,慢指针一次走一步,假如有环,一定相遇于环中某点(结论1)。接着让两个指针分别从相遇点和链表头出发,两者都改为每次走一步,最终相遇于环入口(结论2)。以下是两个结论证明:两个结论:1、设置快慢指针,假如有环,他们最后一定相遇。2、两个指针分别从链表头和...原创 2020-02-08 09:10:21 · 95 阅读 · 0 评论 -
剑指offer (46)
题目 :每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个...原创 2020-02-07 21:45:44 · 177 阅读 · 0 评论 -
剑指offer (36)
题目 : 输入两个链表,找出它们的第一个公共结点。思路 :如果有公共节点1)若两个链表长度相等,那么遍历一遍后,在某个时刻,p1 == p2 2)若两个链表长度不相等,那么短的那个链表的指针pn(也就是p1或p2) 必先为null,那么这时再另pn = 链表头节点。经过一段时间后, 则一定会出现p1 == p2。如果没有公共节点:这种情况可以看成是公共节点为null,顾...原创 2020-02-06 21:30:14 · 122 阅读 · 0 评论 -
剑指offer (25)
题目 : 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路 :递归思想 :把大问题转化为若干子问题,此题转化为一个头结点和去除头结点剩余部分,剩余部分操作和原问题一致public class Solution { pub...原创 2020-02-06 20:41:40 · 113 阅读 · 0 评论 -
剑指offer (16)
题目 : 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路 : 简单题 ,不做赘述 ,看代码注释 public ListNode Merge(ListNode list1, ListNode list2) { ListNode pre3 = head; ListNode preRet = pre3; while (list1 != n...原创 2020-02-06 16:40:22 · 62 阅读 · 0 评论 -
剑指offer (15)
题目 :输入一个链表,反转链表后,输出新链表的表头。思路 : 此题较简单 ,看代码注释 // 将单链表反转 public static void reversetList(ListNode head) { // 如果当前链表为空,或者只有一个节点,无需反转,直接返回 if (head.next == null || head.next.next == null) { retu...原创 2020-02-06 15:54:20 · 75 阅读 · 0 评论 -
剑指offer (14)
题目 : 输入一个链表,输出该链表中倒数第k个结点。思路 :// 1. 编写一个方法,接收head节点,同时接收一个index// 2. index 表示是倒数第index个节点// 3. 先把链表从头到尾遍历,得到链表的总的长度 getLength// 4. 得到size 后,我们从链表的第一个开始遍历 (size-index)个,就可以得到// 5. 如果找到了,则返回该节点,否则...原创 2020-02-06 15:50:07 · 66 阅读 · 0 评论 -
剑指offer (3)
题目 : 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。思路 : 既然是从尾到头,就用一个栈来中转数据class Solution{ public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ArrayList<Integer> res = new ArrayLis...原创 2020-02-06 10:29:01 · 129 阅读 · 0 评论