LeetCode-143-Reorder List
Posted 无名路人甲
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode-143-Reorder List相关的知识,希望对你有一定的参考价值。
算法描述:
Given a singly linked list L: L0→L1→…→Ln-1→Ln,
reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…
You may not modify the values in the list‘s nodes, only nodes itself may be changed.
Example 1:
Given 1->2->3->4, reorder it to 1->4->2->3.
Example 2:
Given 1->2->3->4->5, reorder it to 1->5->2->4->3.
解题思路:分三步,1找到中间节点,2翻转后半部分,3重新连接组织两部分。注意边界值。
void reorderList(ListNode* head) { if(head==nullptr || head->next ==nullptr) return; ListNode* fast=head; ListNode* slow=head; while(fast->next!=nullptr && fast->next->next!=nullptr){ fast = fast->next->next; slow = slow->next; } ListNode* slowHead = reverseList(slow->next); slow->next=nullptr; fast=head; slow=slowHead; while(fast!=nullptr && slow!=nullptr){ ListNode* temp = fast->next; fast->next=slow; slow=slow->next; fast->next->next = temp; fast=temp; } } ListNode* reverseList(ListNode* head){ if(head==nullptr) return nullptr; ListNode* dup = new ListNode(-1); while(head!=nullptr){ ListNode* temp = dup->next; dup->next=head; head=head->next; dup->next->next=temp; } return dup->next; }
以上是关于LeetCode-143-Reorder List的主要内容,如果未能解决你的问题,请参考以下文章