Reorder List
来源:互联网 发布:centos syslog 配置 编辑:程序博客网 时间:2024/04/29 09:08
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}.
L : L0→L1→…→Ln-1→Ln 分成两个链表
L1:L0→L2→…→Ln/2
L2 : Ln/2+1…→Ln 再将 L2翻转 L2:Ln…→Ln/2+1
然后再合并两个表。
class Solution {public: ListNode* reverselist ( ListNode* head ) { ListNode* p = head, *q = head->next, *r = NULL; while ( q != NULL ) { r = q->next; q->next = p; p = q; q = r; } head->next = NULL; return ( head = p ); } ListNode* getmid ( ListNode* head, bool sblit = true ) { if ( head == NULL || head->next == NULL || head->next->next == NULL ) { return head; } ListNode* p = head, *q = head, *r = NULL; while ( q != NULL && q->next != NULL ) { r = p; p = p->next; q = q->next->next; } if ( sblit == true ) { r->next = NULL; } return p; } ListNode* connectlist ( ListNode* p, ListNode* q ) { if ( p == NULL ) { return q; }else if ( q == NULL ) { return p; /* both p and q are all not NULL */ bool flag = true; // 使用flag来轮转 ListNode* r = p, *head = p; while ( p != NULL && q != NULL ) { if ( flag ) { p = p->next; head->next = q; flag = false; } else { q = q->next; head->next = p; flag = true; } head = head->next; } //head->next = ( p != NULL ? p : q ); return r; } void reorderList ( ListNode *head ) { /* 指针为NULL,或者只有一个元素,或者只有两个元素,不做任何处理 */ if ( head == NULL || head->next == NULL || head->next->next == NULL ) { return ; } ListNode* mid = getmid ( head ); mid = reverselist ( mid ); head = connectlist ( head, mid ); }};
0 0
- 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
- Reorder List
- Problem 67 调试本地内存泄漏?
- 采用opencv轮廓查找分割字符
- codeforces 383D Antimatter (dp)
- UVA 12563 Jin Ge Jin Qu hao 01背包变形
- JAVA笔记:Java网络编程(四)UDP程序设计
- Reorder List
- 简述数组与指针的区别?
- Unity3D的三种坐标系
- linux 下6款 git 图形客户端
- PhotoView的使用方法
- 1009 FatMouse' Trade
- 一个直接运行Windows命令行的软件
- opencv缩略图
- 全局变量和static的全局变量的主要区别