Given a singly linked list L: L0→L1→…→Ln-1→Ln,
reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…You may not modify the values in the list's nodes, only nodes itself may be changed.
Example 1:
Given 1->2->3->4, reorder it to 1->4->2->3.
Example 2:
Given 1->2->3->4->5, reorder it to 1->5->2->4->3.
代码:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: void reorderList(ListNode* head) { if(!head || !head -> next || !head -> next -> next) return ; ListNode *slow = head; ListNode *fast = head; while(fast -> next && fast -> next -> next) { slow = slow -> next; fast = fast -> next -> next; } ListNode *dummy = slow -> next; slow -> next = NULL; dummy = reverseList(dummy); while(head && dummy) { ListNode *New = head -> next; head -> next = dummy; dummy = dummy -> next; head -> next -> next = New; head = New; } } ListNode *reverseList(ListNode *head) { if(!head || !head -> next) return head; ListNode *New = reverseList(head -> next); head -> next -> next = head; head -> next = NULL; return New; }};
快慢指针把链表从中间分开然后反转链表 之后把两个链表合并 希望今天出门剪头发之前 Leetcode 刷到 200