C++ || Simple And Easy Approach
\n/**\n * Definition for singly-linked list.\n * struct ListNode {\n *     int val;\n *     ListNode *next;\n *     ListNode() : val(0), next(nullptr) {}\n *   
```\n/**\n * Definition for singly-linked list.\n * struct ListNode {\n *     int val;\n *     ListNode *next;\n *     ListNode() : val(0), next(nullptr) {}\n *     ListNode(int x) : val(x), next(nullptr) {}\n *     ListNode(int x, ListNode *next) : val(x), next(next) {}\n * };\n */\nclass Solution {\npublic:\n    void reorderList(ListNode* head) {\n        \n//      step 1 : Finding the middle of the list in order to split it in 2 parts\n        ListNode *slow=head;\n        ListNode *fast=head->next;\n        \n        while(fast&&fast->next)\n        {\n        slow=slow->next;\n        fast=fast->next->next;\n        }\n        \n        ListNode *head2=slow->next;\n        slow->next=NULL;\n        \n//      step 2 : Reversing the 2nd half of the list\n        ListNode *forward=NULL;\n        ListNode *prev=NULL;\n        ListNode *curr=head2;\n        \n        while(curr)\n        {\n            forward=curr->next;\n            curr->next=prev;\n            prev=curr;\n            curr=forward;\n        }\n        \n//       Step 3 : Merge the 2 lists \n        head2=prev;\n        while(head2)\n        {\n            ListNode *ptr1=head->next;\n            ListNode *ptr2=head2->next;\n            \n            head->next=head2;\n            head2->next=ptr1;\n            head=ptr1;\n            head2=ptr2;\n            \n        }\n    }\n};\n```\nIf you like my solution plz upvote.
['Linked List', 'C', 'C++']