LeetCode: Reorder List
来源:互联网 发布:翼龙贷 数据之家 编辑:程序博客网 时间:2024/05/23 19:15
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}
.
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: void reorderList(ListNode *head) { int count =0; ListNode* half = head; ListNode* itr = head; while(itr) { count++; itr = itr->next; } itr = head; if(count == 0 || count == 1 || count == 2) return; for(int i = 0; i < count/2; i++) { itr = half; half = half->next; } itr->next = NULL; ListNode* pre = NULL; ListNode* cur = half; while(cur) { ListNode* next = cur->next; cur->next = pre; pre = cur; cur = next; } half = pre; itr = head; while(itr && half) { ListNode* h_next = itr->next; ListNode* e_next = half->next; if(h_next) half->next = itr->next; itr->next = half; itr = h_next; half = e_next; } }};
Round 2:
class Solution {public: void reorderList(ListNode *head) { int size = 0; ListNode *iter = head, *rhead = head, *pre = NULL, *next = NULL; while(iter) { iter = iter->next; size++; } int mid = 0; iter = head; while(mid < size/2) { if(mid == size/2-1) { rhead = iter->next; iter->next = NULL; } iter = iter->next; mid++; } while(rhead != NULL) { next = rhead->next; rhead->next = pre; pre = rhead; rhead = next; } iter = head; rhead = pre; while(iter != NULL) { next = iter->next; if(next == NULL) next = rhead->next; iter->next = rhead; rhead = rhead->next; iter->next->next = next; iter = next; } }};
0 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)
- Ctone T01双卡双待Android 2.2的3.5英寸电容式多点触摸的GSM智能手机带GPS无线上网
- Spring方法注入
- 二次开发注意问题
- Dailys NFC标签阅读器Dl710plus适合于众多的NFC应用
- 白话REST-识别真假REST
- LeetCode: Reorder List
- Coach手袋的WAP立体声高尔夫球带MP3的帮助
- VS2012打开项目崩溃的问题
- onCreat及以后
- ios 组合动画实现图片浏览,效果为图片放大并淡出
- Tomcat标题栏内容
- ColdFusion的开发公司
- Android的果冻豆4.3 - 更好,功能强大
- CK&A在乎 - 老服务和高级护理在佛罗里达州迈阿密