- Linked list
node{ int val; Node next;}
1->2->5>7>null
可以每次都先设一个dummyhead,return dummy head.next
二叉树: node{ int val; Node left;Node right}
Database Index,讲到树的时候会有提
三大基本功:
- reverse a link list
- merge sorted link list
- find the middle node of the linklist
dumy node可以放在开头
- reverse就是next变成prev,原来的head指向null,原来的尾变head
- middle 的话,一个for loop就可以找到,按照双指针来,尾部走两个,middle走一个
- merge two sorted list, 双指针,判大小,然后东一。可以先设一个prehead->a->b,return a就可以。注意判断条件:L1很短,空了之后直接把L2后面接上就好了
判断link list是不是环(不太会考)
double link list
- 回文判断,双指针,但注意要回预处理大小写字母,空格字符的处理
- soretd array去重,只能in-place和不能创造新的空间,思路:双指针,尾指针判大小后往后移动最后一个同位素的后面,头指针不动,然后把头指针的next赋值成新的数字,移动head,重复尾指针移动,然后return这个去重list。
- 滑动窗口,有一个size的subarray,让他内部元素sum最大,小窍门[a,b,c,d]和[b,c,d,e],sub2只需要sub1-a+e就行
- 3sum=0,但不只一组sum相同的情况,全部return。 先sort,然后如果已经sum>0,那么肯定直接break就行,再往后更大,优化: low increment到不重复的新数,eg,0,0,1, 这里lo跳过后面的0直接到1
- 3 sum closest. 常量:INT_MAX和INT_MIN,看32bit还是64bit,
算法除了写出思路,还要讲出思路(80),还要optimization