leetcode——链表reorder

来源:互联网 发布:面试淘宝运营技巧 编辑:程序博客网 时间:2024/06/06 15:18
#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) {                ListNode * p0 = head;        ListNode * p = head;        if(  !(p != NULL && p->next != NULL && p->next->next != NULL)){            //少于等于两个节点            return;        }                //链表分两半        while( p->next!= NULL && p->next->next != NULL){        p0 = p0->next;            p = p->next->next;        }        //后半反向        p = p0->next;        p0->next = NULL;        //尾变首        ListNode *t = p;p = p->next;t->next = NULL;//特别注意        while(p != NULL){            ListNode *tt = p->next;            p->next = t;            t = p;            p = tt;        }        p = t;                //两部分合并。        ListNode *tt;        p0 = head;        while( p0 != NULL && p!= NULL){            t = p0->next;            tt = p->next;            p0->next = p;            p->next = t;            p0 = t;            p = tt;        }    }};int main(){Solution ss;ListNode *head  = new ListNode(1);ListNode *p = head;int n = 2;while( n != 6){p->next = new ListNode(n++);p = p->next;}ss.reorderList(head);return 0;}

0 0
原创粉丝点击