reorder list
来源:互联网 发布:淘宝恶意举报卖家售假 编辑:程序博客网 时间:2024/05/17 17:57
题目:
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) { if (head == NULL || head->next == NULL) return; ListNode* slow = head, *fast = head; //find the middle point while (fast->next != NULL && fast->next->next != NULL) { slow = slow->next; fast = fast->next->next; } //break and reverse the second half of list fast = slow; slow = slow->next; fast->next = NULL; slow = reverse(slow); ListNode* curr = head; while (curr->next) { ListNode* tmp = curr->next; curr->next = slow; slow = slow->next; curr->next->next = tmp; curr = tmp; } curr->next = slow; } ListNode* reverse(ListNode* head) { if (head == NULL || head->next == NULL) return head; ListNode* prev = head; for(ListNode *curr = prev->next, *Next = curr->next; curr; ) { curr->next = prev; prev = curr; curr = Next; Next = Next ? Next->next : Next; } head->next = NULL; return prev; }};
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
- JavaScript进阶(七)JS截取字符串substr 和 substring方法的区别
- spinlock剖析与改进
- quick-cocos2d-x开发工具sublime text及其强力插件QuickXDev
- 杭电ACM1004
- linux windows 动态库 静态库
- reorder list
- Java NIO系列教程(三) Buffer
- 杭电ACM。。。sort
- Hibernate核心原理分析
- 剑指offer代码解析——面试题25二叉树中和为某一值的路径
- leetcode 202. Happy Number
- 可展开列表ExpandableListView—SimpleExpandableListAdpater
- 头文件用途
- MySql