[LeetCode] Reorder List
来源:互联网 发布:淘宝衣服相同钱不一样 编辑:程序博客网 时间:2024/06/08 18:49
Given a singly linked list L:
reorder it to:
You must do this in-place without altering the nodes’ values.
For example,
Given
解题思路1
首先用一个vector存储所有的结点,然后将倒数第i个结点插入到第i个结点之后。
实现代码1
//Runtime:82 ms#include <iostream>#include <vector>using namespace std;struct ListNode{ int val; ListNode *next; ListNode(int x) : val(x), next(NULL){}};class Solution {public: void reorderList(ListNode *head) { if (head == NULL) { return; } ListNode *p = head; vector<ListNode*> nodes; while (p) { nodes.push_back(p); p = p->next; } int left = 0; int right = nodes.size() - 1; while (left < right) { nodes[left]->next = nodes[right]; nodes[right--]->next = nodes[++left]; } nodes[left]->next = NULL; }};int main(){ ListNode *p1 = new ListNode(1); ListNode *p2 = new ListNode(2); ListNode *p3 = new ListNode(3); ListNode *p4 = new ListNode(4); p1->next = p2; p2->next = p3; p3->next = p4; Solution s; s.reorderList(p1); ListNode *p = p1; while (p) { cout<<p->val<<endl; p = p->next; }}
解题思路2
首先把链表从中间分成两部分,然后将后一部分链表反转,最后将两个链表合并。
实现代码2
//Runtime:98 msclass Solution {public: void reorderList(ListNode *head) { if (head == NULL) { return; } ListNode* ps = head; ListNode* pf = head; while (pf->next && pf->next->next) { ps = ps->next; pf = pf->next->next; } ListNode *p2 = ps->next; ps->next = NULL; p2 = reverseList(p2); head = mergeList(head, p2); } ListNode* mergeList(ListNode *p1, ListNode *p2) { ListNode *result = p1; ListNode *temp; while (p2) { temp = p2; p2 = p2->next; temp->next = p1->next; p1->next = temp; p1 = p1->next->next; } return result; } ListNode* reverseList(ListNode *head){ if (head == NULL) { return NULL; } ListNode *p = head->next; head->next = NULL; while (p) { ListNode *temp = p; p = p->next; temp->next = head; head = temp; } return head; }};
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)
- BZOJ 2402 陶陶的难题II 二分答案+斜率优化+树链剖分+线段树维护凸包
- java windows linux BASE64Encoder 加密汉字不一致
- JavaFx 组件获得焦点
- 看rtmp文档总结--chunk块的介绍
- 排序算法总结
- [LeetCode] Reorder List
- error LNK2019: 无法解析的外部符号 ___glutInitWithExit@12,该符号在函数 _glutInit_ATEXIT_HACK@8 中被引用 1>GEARS.obj : er
- [代码安全] 小心volatile的原子性误解
- ubuntu下安装ssh如下报错的解决办法
- 第二十章 RTC实时时钟实验
- 黑马程序员——Objective-C——简介
- ListView 滑动时组件数据或图片变化
- ContentProvider的使用
- crash引起播放列表退出的问题分析过程分享