Reorder List
来源:互联网 发布:新手淘宝店课程免费 编辑:程序博客网 时间:2024/05/16 10:06
题目链接
原题
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}.
思路
1 找到链表的后半部分, 然后反转后半部分.2 类似归并排序的做法, 改变前部分链表和反转的后半部分链表的指向即可.
code
/** * 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) { const ListNode* null = NULL; if(head == null || head->next == null) return; // find the half list ListNode* slow = head; ListNode* fast = head; while(fast->next != null && fast->next->next != null) { slow = slow->next; fast = fast->next->next; } // reverse ListNode* p = NULL; while(slow) { ListNode* tmp = slow->next; slow->next = p; p = slow; slow = tmp; } // reorder ListNode* p2 = head; while(p && p2) { ListNode* t1 = p2->next; ListNode* t2 = p->next; p2->next = p; p->next = t1; p2 = t1; p = t2; } return; }};
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
- C语言-指针-函数
- Hadoop — 使用Eclipse编译运行MapReduce程序(Hadoop2.6.0)
- iOS View如何实现背景黑透
- java入门程序100例学习笔记(007车牌号计算)
- tar命令解压.zip文件出错:gzip: stdin has more than one entry--rest ignored
- Reorder List
- 【C++】primer plus 练习8.1
- 状态已恢复七八成
- 1、Oracle专家编程--安装SCOTT/TIGER模式
- 开源项目DataBaseManager(一):想法
- linux下安装yum命令安装lamp环境
- 基于Smack3.0.4+ Openfire3.10.2下学习开发IM(二)用户分组信息(Roster、RosterGroup和RosterEntry)
- 图片和base64 String互转
- CountDownLatch用法