这篇记录一些有意思的小东西
链表递归反转
reverse :: [a] -> [a]
reverse [] = []
reverse [x : xs] = reverse[xs] ++ [x]
Haskell的反转实现,翻译成人话
function reverse (node) {
if (node == null || node->next == null) {
return node
}
let newHead = reverse(node->next)
node->next->next = node
node->next = null
return newHead
}
- 返回永远是最后一个节点,也就是新的头结点
- 每轮递归的
node->next已经是一个反转好的节点
这是第二次递归返回时的链表,此时4、5已经reverse,H在3时不需要考虑5的情况,只需要把3和4reverse。
