3
ListNode *reverse(ListNode *head) {4
ListNode *prev = NULL, *curr = head, *nextstop;14
ListNode *findMiddleNode(ListNode *head) {15
ListNode *slowptr = head, *fastptr = head->next;16
while (fastptr && fastptr->next) {17
slowptr = slowptr->next;18
fastptr = fastptr->next->next;23
int pairSum(ListNode *head) {26
ListNode *midNode = findMiddleNode(head);27
ListNode *head2 = reverse(midNode->next);31
ListNode *p1 = head, *p2 = head2;33
ans = max(ans, p1->val + p2->val);38
midNode->next = reverse(head2);