1. A way of writing the iterative method
ListNode* reverse_linkList(ListNode* head){
if(head == nullptr || head->next == nullptr) return head;
ListNode* begin = nullptr;
ListNode* mid = head;
ListNode* end = head->next;
while(true){
mid->next = begin;
if(end == nullptr){
break;
}
begin = mid;
mid = end;
end = end->next;
}
head = mid;
return head;
}
2. Another way to write the iterative method
ListNode* reverse_linkList(ListNode* head) {
ListNode* prev = nullptr;
ListNode* current = head;
while (current != nullptr) {
ListNode* nextNode = current->next;
current->next = prev;
prev = current;
current = nextNode;
}
return prev;
}
3. Recursive method implementation
ListNode* reverse_linkList(ListNode* head) {
if (head == nullptr || head->next == nullptr) {
return head;
}
ListNode* newHead = reverse_linkList(head->next);
head->next->next = head;
head->next = nullptr;
return newHead;
}