Reverse a given singly linked list.
At first, I used extra memory to store the reversed array.
Show Answer
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if (head == NULL || head->next == NULL)
return head;
int i;
vector<int> v;
ListNode* cur = head;
while (cur != NULL) {
v.push_back(cur->val);
cur = cur->next;
}
i = v.size()-1;
cur = head;
while (head != NULL) {
head->val = v[i];
i--;
head = head->next;
}
return cur;
}
};
They told me not to use extra memory. So, I performed an in-place reversal of the linked list.
Show Answer
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if (head == NULL || head->next == NULL)
return head;
ListNode* prev = NULL;
while (head != NULL) {
ListNode* tmp = head->next;
head->next = prev;
prev = head;
head = tmp;
}
return prev;
}
};