在方案中向右旋转列表

时间:2018-03-08 17:26:08

标签: scheme

如果这是向左旋转列表:

(define (rotate-left l)
  (if (null? l)
      '()
      (append (cdr l) (cons(car l) '()))))

如何将列表向右旋转?

2 个答案:

答案 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)