我是新来的方案,有人可以给我如何得到的,主张“从列表中间元素?”
Answer 1:
这里是我的解决方案。 它是基于一个乌龟和野兔算法 (它在任何你需要检测圆名单列表遍历的使用),因此它不会做任何更多的工作比一个健全的列表遍历具有无论如何做。 :-)
(define (middle-elements lst)
(if (null? lst) '()
(let loop ((tortoise lst)
(hare (cdr lst)))
(cond ((eq? tortoise hare) #f)
((null? hare) (list (car tortoise)))
((null? (cdr hare)) (list (car tortoise) (cadr tortoise)))
(else (loop (cdr tortoise) (cddr hare)))))))
它包括以下情况:
- 如果给一个空列表,返回一个空列表。
- 如果给定的具有奇数个元素的列表,返回与该中间元件的单列表。
- 如果给出偶数元素的列表,返回与两个中间元素的列表。
- 如果给循环列表,返回
#f
。 - 如果给一个不正确的清单(包括非列表),召唤恶魔鼻。
文章来源: Get the middle elements from List in scheme