diff --git a/list.cpp b/list.cpp index 593a87e..5dc6d18 100644 --- a/list.cpp +++ b/list.cpp @@ -42,6 +42,18 @@ List *append(List *lst, T value) return lst; } +/** Reverse a list + */ +template +List *reverse(List *lst, List *prev = NULL) +{ + auto next = lst->next; + lst->next = prev; + if (next == NULL) + return lst; + return reverse(next, lst); +} + template std::ostream& operator<<(std::ostream& ostream, const List *lst) { @@ -57,5 +69,8 @@ int main(void) for (int i = 2; i < 10; ++i) lst = append(lst, i); std::cout << lst << std::endl; + lst = reverse(lst); + std::cout << lst << std::endl; + delete lst; return 0; }