2020年面试算法题合集(北京中小公司版)持续更新
数组
1. 取两个排序数组的交集
https://blog.csdn.net/apacat/article/details/90300350
链表
1. 剑指offer24:反转链表 (leetcode206. Reverse Linked List)
方法1: iterative
记忆点: 采用pre,cur,next3个指针进行迭代
关键点:
- 分析出有3个指针: pre,cur,next。
- for的终止条件
cur != nil
表示每个链表节点都需要翻转一次. 以链表[1,2,3]为例,cur != nil可以使得1,2,3都分别作为cur执行一次循环。 - 返回的指针是pre。因为退出循环的条件是cur==nil,退出循环后的指针的值为pre=xxx,cur=nil,next=nil,很明显需要返回pre。
// 1->2->3->null
//null<-1<-2<-3
// cur:当前处理的节点,cur.Next需要指向其前一个元素
// next:保存子链
// pre:保存前一个元素
// Test Cases: 1. NULL 2.One Node 3. Two Nodes
func reverseList(head *ListNode) *ListNode {
var pre *ListNode
cur := head
for cur != nil{
next := cur.Next // save next
cur.Next = pre // recerse cur
// update pointers
pre = cur
cur = next
}
return pre
}
方法2: recursive
如何递归反转链表
How To Reverse A Singly Linked List | The Ultimate Explanation (Iteratively & Recursively)