#include <iostream>
using namespace std;
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)
{
return;
}
ListNode *fastp = head,
*lowp = head,
*lastp;
while (fastp != NULL && fastp->next != NULL)
{
lastp = lowp;
fastp = fastp->next->next;
lowp = lowp->next;
}
lastp->next = NULL;
lowp = reverseList(lowp);
fastp = head; //前半部分
ListNode *next1, *next2;
while (1)
{
next1 = fastp->next;
fastp->next = lowp;
next2 = lowp->next;
fastp->next->next = next1;
lowp = next2;
if (next1)
{
fastp = next1;
}
else
{
fastp = fastp->next;
break;
}
}
fastp->next = lowp;
}
ListNode * reverseList(ListNode * head){
if (head == NULL || head->next == NULL)
{
return head;
}
ListNode *pre = head,
*next = head->next,
*next2;
head->next = NULL;
while (next != NULL)
{
next2 = next->next;
next->next = pre;
pre = next;
next = next2;
}
return pre;
}
void printList(ListNode * head){
for (; head != NULL; head = head->next)
{
cout << head->val << endl;
}
}
};
int main(){
ListNode *head = new ListNode(1);
head->next = new ListNode(2);
head->next->next = new ListNode(3);
Solution sln;
sln.reorderList(head);
sln.printList(head);
}
Reorder List
最新推荐文章于 2021-05-18 15:15:46 发布