Algorithm
描述: 给定一个单链表 L:L0→L1→…→Ln-1→Ln , 将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
思路:
- 用快慢法找到中点,并从中点断开为左右两个链表
- 反转右链表
- 逐个合并左右链表
Review
Avoid cascading if-else in Kotlin
if
应只用于2个选项的判断,3个及以上的选项的判断应该由 when
来处理。
串联的 if
上方为 if
语句的 kotlin 代码,反编译为 Java 后如下图:
用 when 代替
when
代替后如图所示:
如果判断条件是2个,会转成 if-else
,如果2个以上且 case 是常量或二进制表达式时,则会转成 switch
。
因为 switch
是常量,根据1个预选创建好的“跳转表”跳转,所以在条件多的时候,比 if
逐次对比运行得要更快。
if else 工作原理
if-else
在Kotlin中是一个表达式,也是一个状态,它返回一个值,也可以作为语句使用。而在Java中 if-else
只是一个状态。
if-else
的语法如下:
让我们配合1个谜题来理解这个。
这个方法在调用时不会 print 任何内容。因为 if-else
是单独的表达式,而 let 是被最后的表达式所调用。上面的代码也可以等价的视为:
Tip
android ktx 中动画的 doOnCancel
, doOnEnd
, doOnPause
, doOnRepeat
, doOnResume
, doOnStart
都提供了单独的设置方法,如果只关心动画的某个状态,只需要设置对应的监听即可。
Share
暂无