如果这是向左旋转列表:
(define (rotate-left l)
(if (null? l)
'()
(append (cdr l) (cons(car l) '()))))
如何将列表向右旋转?
答案 0 :(得分:0)
如果您可以编写辅助函数来查找最后一个元素,那么执行递归实现非常容易:
loopback
答案 1 :(得分:0)
这是一个简短的非递归解决方案:
(define (rotate-right l)
(let ((rev (reverse l)))
(cons (car rev) (reverse (cdr rev)))))
这是一个迭代解决方案:
(define (rotate-right l)
(let iter ((remain l)
(output '()))
(if (null? (cdr remain))
(cons (car remain) (reverse output))
(iter (cdr remain) (cons (car remain) output)))))
(rotate-right '(1 2 3 4 5)) ;==> (5 1 2 3 4)