Skip to content

Commit 7776de4

Browse files
authored
add iterative approach
1 parent e5adb20 commit 7776de4

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

random-tasks/reverse-linked-list.cpp

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ void reverseListHelper(LinkedListNode* ll, LinkedListNode*& last, LinkedListNode
7070
return;
7171
}
7272
reverseListHelper(ll->next, last, result);
73-
73+
7474
ll->next = nullptr;
7575
last->next = ll;
7676
last = last->next;
@@ -87,15 +87,30 @@ void reverseList(LinkedListNode*& ll) {
8787
ll = result;
8888
}
8989

90+
// reverse list with O(1) additional memory (iterative)
91+
void reverseListIter(LinkedListNode*& ll) {
92+
LinkedListNode* current = ll;
93+
LinkedListNode* prev = nullptr;
94+
LinkedListNode* next = nullptr;
95+
96+
while (current) {
97+
next = current->next;
98+
current->next = prev;
99+
prev = current;
100+
current = next;
101+
}
102+
ll = prev;
103+
}
104+
90105
int main() {
91-
LinkedListNode* example = init({ 6, 9, 14, 4, 1, 12, 9, 6, 5, 2, 18, 15 });
106+
LinkedListNode* example = init({ 1, 2, 3, 4, 5, 6, 7, 8, 9 });
92107
std::cout << "Original list: " << std::endl;
93108
printNode(example);
94109
LinkedListNode* reversed = reverse(example);
95-
reverseList(example);
110+
reverseListIter(example);
96111
printNode(example);
97112
printNode(reversed);
98-
113+
99114
freeNode(example);
100115
freeNode(reversed);
101116
}

0 commit comments

Comments
 (0)