https://github.com/binbinmeng/algrithms_interview/wiki
一. 单链表相关问题
1. 链表的冒泡排序
2. 删除无头非尾节点
3. 反转链表
递归或者三个指针(两个指针赋值,while循环,第三个指针赋值,交换值)
4. 在当前节点前插入一个数据x
5. 查找链表的中间节点。
两个指针,一个2步,一个一步,当2步到结尾,一步则到中间
6. 删除单链表的倒数第K个节点(K>1&&K<总长度)(类似如中间节点操作)
两个指针,两个指针相差K-1,当前面指针到结尾时,后面的指针指向倒数第K个节点
7. 将两个有序单链表合并
类似归并
8. 判断链表是否有环,有环返回相遇节点
1个一步,一个二步,如果碰面,则有换,否则无环
9. 输入一个链表的头结点,从尾到头反过来打印出每个结点的值
10. 输入两个链表,找出它们的第一个公共结点
遍历到结尾,做差,遍历到这个差的位置
11. 约瑟夫环问题
0,1,3...,n - 1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字或者n个数的删除次序。
12.旋转单链表
给定一个链表,旋转链表,使得每个节点向右移动k个位置,其中k是一个非负数。 如给出链表为 1->2->3->4->5->NULL and k = 2, return 4->5->1->2->3->NULL.
13. 单链表排序
单链表的归并排序
单链表的插入排序
14. 划分链表
按某个给定值将链表划分为左边小于这个值,右边大于这个值的新链表 如一个链表 为 1 -> 4 -> 5 -> 2 给定一个数 3 则划分后的链表为 1-> 2 -> 4 -> 5
15. 链表相加求和
假设链表中每一个节点的值都在 0-9 之间,那么链表整体可以代表一个整数。 例如: 9->3->7 可以代表 937 给定两个这样的链表,头节点为 head1 head2 生成链表相加的新链表。 如 9->3->7 和 6 -> 3 生成的新链表应为 1 -> 0 -> 0 -> 0
16. 删除有序/无序链表中重复的元素
删除有序链表中的重复元素
删除无序链表中的重复元素
17. 重排链表
给定一个链表 1 -92 -8 -86 -9 -43 -20 链表的特征是奇数位升序,偶数位为降序,要求重新排列链表并保持链表整体为升序
18. 判断两个单链表(无环)是相交
19. 头插法/尾插法构建一个单链表
20. 和为定值的子List
给函数传递一个正整数的列表alist和一个正整数T,假装它等于[1,3,6,4,2,7],给出alist里所有相加等于T的元素的list,每个数只用一次。比如T=7,列表里3+4=7,7=7,1+6=7。你的函数就要返回[[3,4],[7],[1,6]
21. 从尾到头打印链表
22. 删除链表中重复的结点