单链表重排

重排链表

http://www.nowcoder.com/questionTerminal/3d281dc0b3704347846a110bf561ef6b

定义快慢指针令其分别等于p,q,找到倒数两个节点r,s,将最后一个节点s按规则插入到相应位置,将r->next=nullptr,接着将之前定义的p,q指针依次向后移动,重复之前操作,完成。

class Solution {
public:
    void reorderList(ListNode *head) {
        if (head == NULL || head->next==NULL || head->next->next ==NULL)   return ;
        ListNode* p=head;ListNode* r=head;
        ListNode* q=head->next;ListNode* s=head->next;

        while(q->next!=NULL)
        {
            while(s->next!=NULL)
            {r=r->next;s=s->next;}
            p->next=s;s->next=q;r->next=NULL;
            if (q->next!=NULL){p=q;q=q->next;r=p;s=q;}
            else break;
        }
        return;  
    }
};
全部评论

相关推荐

找不到工作死了算了:没事的,雨英,hr肯主动告知结果已经超越大部分hr了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务