leetcode:Reorder List
来源:互联网 发布:java post与get 方式 编辑:程序博客网 时间:2024/06/17 12:11
问题
Given a singly linked list L: L0→L1→…→Ln-1→Ln,
reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…
You must do this in-place without altering the nodes' values.
For example,
Given {1,2,3,4}
, reorder it to {1,4,2,3}
.
代码class Solution {public: void reorderList(ListNode *head) {if(head==NULL||head->next==NULL)return ;/*[快速求出链表的中间结点]通过两个结点,一个走1个步长,一个走2个步长,最后算出链表的中间结点middleNode*/ ListNode *midNode=head;ListNode *stepNode=head;while(stepNode!=NULL&&stepNode->next!=NULL&&stepNode->next->next!=NULL){midNode=midNode->next;stepNode=stepNode->next->next;} /*分成两个链表,将链表中间结点之后的链表(链表的后半部分)逆序*/ ListNode *head1=head;ListNode *head2=midNode->next;midNode->next=NULL;ListNode *p=head2->next;//开始求逆序head2->next=NULL;while(head2&&p){ListNode *tmp=p->next;p->next=head2;head2=p;p=tmp;}/*完成链表前半部分和逆序后的后半部分的结合!*/while(head1!=NULL&&head2!=NULL){ListNode *tmp1=head1->next;ListNode *tmp2=head2->next;head1->next=head2;head2->next=tmp1;head1=tmp1;head2=tmp2;} }};
复杂度
时间复杂度:O(N)。
7 0
- [leetcode][list] Reorder List
- [leetcode][list] Reorder List
- Leetcode: Reorder List
- [LeetCode] Reorder List
- LeetCode题解:Reorder List
- Leetcode: Reorder List
- LeetCode:Reorder List
- leetcode之Reorder List
- Leetcode: Reorder List
- [LeetCode]Reorder List
- [LeetCode] Reorder List
- leetcode Reorder List
- LeetCode | Reorder List
- LeetCode Reorder List
- LeetCode 之 Reorder List
- Leetcode: Reorder List
- LeetCode OJ:Reorder List
- Reorder List (LeetCode)
- IIS MIME设置
- 大众合遥控器 - 众合电子实业有限公司
- 惊爆眼球,锚文本与网站优化不为人知的秘密!
- 新安装oracle11g忘记用户名和密码怎么办?
- 斷號查詢(查找不連續ID記錄)
- leetcode:Reorder List
- linux下mysql定时备份数据库
- hdu 2952Counting Sheep
- 安装Debian新内核
- Android消息循环分析
- scrollBy、getScrollX、getScrollY这4个方法的含义
- UVA Team Queue
- clang 大法好
- 透析Java本质-方法与成员变量的隐藏