1.题解
- 思路很简单:
- 首先,找到链表的中间节点;
- 接着,将链表的后半部分反转;
- 然后,将链表的前半部分和链表的后半部分反转后的结果进行合并。
2.源码
class Solution {
public:
void reorderList(ListNode* head) {
if (head == NULL) {
return;
}
ListNode* mid = findMid(head);
ListNode* head2 = mid->next;
mid->next = NULL;
head2 = reverseList(head2);
ListNode* head1 = head;
mergeList(head1, head2);
}
ListNode* findMid(ListNode* head) {
ListNode* slow = head;
ListNode* fast = head;
while (fast->next != NULL && fast->next->next != NULL) {
slow = slow->next;
fast = fast->next->next;
}
return slow;
}
ListNode* reverseList(ListNode* head) {
ListNode* prev = NULL;
ListNode* cur = head;
while (cur != NULL