143. 重排链表

给定一个单链表 L:L0→L1→…→Ln-1→Ln ,
将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例 1:

给定链表 1->2->3->4, 重新排列为 1->4->2->3.
示例 2:

给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.

ListNode* reorderList(ListNode* head) {
    if (head==NULL) exit(0);
    ListNode* slow=head, * fast=head;
    while (fast!=NULL && fast->next!=NULL){
        slow=slow->next;
        fast=fast->next->next;
    }
    stack <ListNode*> s ;
    ListNode* HalfInsert= slow->next;
    while(HalfInsert!=NULL){
        s.push(HalfInsert);
        HalfInsert=HalfInsert->next;
    }
    ListNode* current=head;
    while (!s.empty() && current!=NULL){
        ListNode* temp=current->next;
        current->next=s.top();
        s.pop();
        current->next->next = temp;
        current=temp;
    }
    return head;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容