超时,思路感觉很好,每次反转,
/**
* 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) {
int index=1;
ListNode* tem=head;
while(tem)
{
if(index++ %2 == 1)
{
tem->next=reverseList(tem->next);
}
else
tem=tem->next;
}
}
ListNode* reverseList(ListNode* head) {
if (head == NULL)
return head;
ListNode* H = head;
head = head->next;
H->next = NULL;
while (head)
{
ListNode* next = head->next;
head->next = H;
H = head;
head = next;
}
return H;
}
};
还有一个思路是:从中间断开,找到后一半的链表,反转后一半链表,依次插入
/**
* 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 == NULL || head->next==NULL || head->next->next==NULL)
return ;
ListNode* slow=head,*fast=head;
while(fast)
{
slow=slow->next;
fast=fast->next->next;
if(fast->next==NULL || fast->next->next==NULL)
break;
}
ListNode* second=(slow->next);
slow->next=NULL;
second=reverseList(second);
ListNode* tem=head;
while(second)
{
ListNode* sec_t=second->next;
second->next=tem->next;;
tem->next=second;
tem=tem->next->next;
second=sec_t;
}
}
ListNode* reverseList(ListNode* head) {
if (head == NULL)
return head;
ListNode* H = head;
head = head->next;
H->next = NULL;
while (head)
{
ListNode* next = head->next;
head->next = H;
H = head;
head = next;
}
return H;
}
};
浙公网安备 33010602011771号