单链表重排
重排链表
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; } };