正如标题所述,我一直在尝试在纯功能实现上对单链接列表及其操作进行编码。到现在为止,一切都很轻松,有很多递归,没有修改...这些作品。
然后我尝试实现给定索引的函数,以从列表中删除元素。我一生无法找到一种无需使用计数器即可实现此目标的方法。几乎就像在问自己:“我怎么知道我自己走了几步而没有自己或旁观者计数?”。
从那时起,我一直处于低迷状态。
这是我到目前为止的代码:
fun <T> removeFromIndex(list:ListNode<T>?, index: Int):ListNode<T>?{
if(list?.data == null){
return list
}
else{
when(index){
0 -> remove(list)
else -> {
when(listSize(list) - index){
0 -> {
return list
}
1 -> {
removeFromTail(list)
}
else -> {
TODO()//HOW?
}
}
}
}
}
}
fun <T> remove(list: ListNode<T>?):ListNode<T>?{
return if(list?.data == null){
list
}
else{
list.next
}
}
fun <T> removeFromTail(list:ListNode<T>?):ListNode<T>?{
return if(list?.data == null){
list
} else{
when(list.next){
null -> null
else -> {
ListNode(list.data, removeFromTail(list.next))
}
}
}
}
非常感谢您的帮助和投入。
答案 0 :(得分:1)
轻松自如:
fun <T> removeFromIndex(list:ListNode<T>?, index: Int):ListNode<T>? = when {
list == null || index < 0 -> list
index == 0 -> list.next
else -> ListNode<T> (
list.data,
removeFromIndex(list.next, index-1)
)
}