class Solution {
public:
void reorderList(ListNode* head) {
// write your code here
if(head == NULL || head->next == NULL){
return;
}
ListNode *list1 = head;
ListNode *mid = findmid(head);
ListNode *list2 = reserve(mid->next);
mid->next = NULL;
ListNode *dummy = new ListNode(0);
ListNode *temp = dummy;
int index = 0;
while(list1!=NULL && list2!=NULL){
if(index%2 == 0){
temp->next = list1;
list1 = list1->next;
}
else{
temp->next = list2;
list2 = list2->next;
}
index++;
temp = temp->next;
}
if(list1!=NULL){
temp->next = list1;
}
if(list2!=NULL){
temp->next = list2;
}
head = dummy->next;
}
ListNode *findmid(ListNode *head){
ListNode *first = head;
ListNode *second = head->next;
while(second!=NULL && second->next!=NULL){
first = first->next;
second = second->next->next;
}
return first;
}
ListNode *reserve(ListNode *head){
ListNode *prev = NULL;
ListNode *cur = head;
ListNode *temp;
while(cur!=NULL){
temp = cur->next;
cur->next = prev;
prev = cur;
cur = temp;
}
return prev;
}
};
143. Reorder List
最新推荐文章于 2021-06-09 22:20:45 发布