ListNode* reverseSecondHalf(ListNode * list){
if(list == NULL || list->next == NULL) return list;
ListNode* fast = list;
ListNode* slow = list;
while(fast->next != NULL && fast->next->next != NULL){
fast = fast->next->ext;
slow = slow->next;
}
slow->next = reverse(slow->next);
return list;
}
ListNode* reverse(ListNode * l){
ListNode* prev = NULL;
while(l){
ListNode* temp = l->next;
l->next = prev;
prev = l;
l = temp;
}
return prev;
}