lintcode:Reorder List
来源:互联网 发布:黑客用函数语言编程 编辑:程序博客网 时间:2024/06/03 03:12
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->null, reorder it to 1->4->2->3->null.
/** * Definition of ListNode * class ListNode { * public: * int val; * ListNode *next; * ListNode(int val) { * this->val = val; * this->next = NULL; * } * } */class Solution {public: /** * @param head: The first node of linked list. * @return: void */ void reorderList(ListNode *head) { // write your code here //为空和一个值的情况 if(head==NULL||head->next==NULL){ return; } //用快慢指针找链表的中心 ListNode *faster=head; ListNode *slower=head; while(faster->next!=NULL && faster->next->next!=NULL){ slower=slower->next; faster=faster->next->next; } ListNode *head2=slower->next; slower->next=NULL; //逆转第二个子链表 faster=head2->next; slower=head2; while(faster){ ListNode *next=faster->next; faster->next=slower; slower=faster; faster=next; } head2->next=NULL; //将第二个子链表一次插到第一个中 ListNode *p1=head; ListNode *p2=slower; while(p2){ ListNode* p1Next=p1->next; ListNode* p2Next=p2->next; p1->next=p2; p2->next=p1Next; p1=p1Next; p2=p2Next; } }};
0 0
- lintcode:Reorder List
- [Lintcode]Reorder List 重排链表
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- java设计模式——结构型之适配器模式
- 通过一个大型项目来学习分布式算法(2)
- ListView在显示较少数据是,高度由item的个数决定,wrap_content有效
- Maven实现远程热部署
- 23. 手势识别之UIRotationGestureRecognizer
- lintcode:Reorder List
- call()、apply()、bind()
- HDOJ1241 Oil Deposits
- iOS 证书的奇葩问题
- 我们要学习的算法
- 类加载机制
- 通过一个大型项目来学习分布式算法(3)
- openwrt-wps功能的实现(一)
- C#课后作业第一章2