您的位置:首页 > 其它

LeetCode 143. Reorder List

2016-05-17 08:58 459 查看
首先将链表分成前半部分和后半部分两个链表,将后一个链表倒序,然后将两个链表合二为一。

特别注意:输入为空链表和链表中的个数只有1或者2个的时候。

class Solution {

public:

    void reorderList(ListNode* head) {

        if(head==NULL)

        return;

        ListNode* p;

        int length=0;

        ListNode* end;

        for(p=head;p!=NULL;)

        {

            length++;

            end=p;

            p=p->next;

        }

        //cout<<length<<endl;

        if(length==1||length==2)

        return;

        p=head;

        for(int i=0;i<length-length/2-1;i++)

        {

            p=p->next;

        }

        //cout<<p->val<<endl;

        //cout<<end->val<<endl;

        ListNode* q;

        q=p->next;

        p->next=NULL;

        p=q;

        while(p!=end)

        {

            q=p->next;

            p->next=end->next;

            end->next=p;

            p=q;

        }

        p=end;

        q=head;

        while(p!=NULL)

        {

            end=end->next;

            p->next=q->next;

            q->next=p;

            q=p;

            q=q->next;

            p=end;

        }

    }

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: