一直以来认为基础算法枯燥无味,但后来发现ta里面的思想对项目实战还是很有帮助的,那接下来好好捣鼓一下吧。
1.迭代思想
对于一块大饼,为了防止今天吃不完明天接着吃,我们每次得从咬痕处吃起,这样子,以减少唾液造成的糜烂面积。
1.1单链表反转
1.现有一个带头节点的单链表head(0,next) -> (1,next) -> (2,next) -> (3,next) 。
2.创建一个带头节点的临时单链表newHead(0,next) -> null 。
3.初始时cur指向(1,next),next 指向(2,next) 。
4.cur指向临时单链表的第一个节点 cur.next = newHead.next 。
5.临时单链表的头节点指向cur newHead.next = cur 。
6.cur 和 next 后移动 。
7.原单链表的头节点指向临时单链表的第一个节点 head.next = newHead.next 。
2.递归思想
将一个大饼按着一定的标准切割成n份规格相同的小饼,一口一块小饼,岂不是更有胃口和风趣。
2.1单链表反转
- 现有一个带头节点的单链表head(0,next) -> (1,next) -> (2,next) -> (3,next) 。
2.需要逆转为head(0,next) -> (3,next) -> (2,next) -> (1,next) 。
3.由于递归用到jvm内存结构的栈,下面我们就用画图理解ta的原理,如图2-1 。