[LeetCode]Reverse Linked List II, 解题报告
2014-01-27 17:49
375 查看
题目
Reverse a linked list from position m to n. Do it in-place and in one-pass.For example:
Given 1->2->3->4->5->NULL, m = 2 and n = 4,
return 1->4->3->2->5->NULL.
Note:
Given m, n satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.
思路
挺不错的问题,写代码之前一定要理清自己的思路,最好能手写一下伪代码,我感觉这样会事半功倍(虽然之前我也很讨厌这样做)我按照四个步骤来处理这道题目:
处理特殊的情况
找到m前一个节点pre
从m节点开始向后reverse,一直到n节点,并记录n之后的post节点
链接pre,post,和m~n之前的翻转链表
AC代码
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public ListNode reverseBetween(ListNode head, int m, int n) { if (head == null || head.next == null || n == m) { return head; } // 1. add safe node ListNode safeNode = new ListNode(Integer.MIN_VALUE); safeNode.next = head; // 2. find previous node and first switch node ListNode pre, swOne; pre = safeNode; swOne = pre.next; for (int i = 1; i < m; i++) { pre = swOne; swOne = swOne.next; } // 3. find last switch node and reverse first to last and find post node ListNode tmpPre, tmpCur, post; tmpPre = swOne; tmpCur = swOne.next; post = swOne.next; for (int i = m; i < n; i++) { post = tmpCur.next; tmpCur.next = tmpPre; tmpPre = tmpCur; tmpCur = post; } // 4. link previous node, switch linked list, post node pre.next = tmpPre; swOne.next = post; return safeNode.next; } }
相关文章推荐
- 九度OJ 1078 二叉树遍历
- 九度OJ 1078 二叉树遍历
- 如何正确的在java web配置数据池
- Android系统中setprop,getprop,watchprops命令的使用
- 转:瑞利信道,莱斯信道和高斯信道模型
- 状态模式
- 12306采用Pivotal GemFire分布式解决方案 解决尖峰高流量并发问题
- 查找符合条件的日期--完全排除休息日
- 【设计模式-观察者模式】
- Debug
- MAPJOIN来解决实际的问题
- linux内存管理-段式和页式管理
- 专访12306技术负责人朱建生:能否向淘宝取经
- 普通的左右按钮图片滚动
- 对Linux安装过程的理解
- 坐等过大年的我之腊月27唠叨
- 解析pdf、word2003、Excel2003、word2007、Excel2007、PowerPoint、Text 可用于Lucene
- 從 Internet 安裝 Cygwin
- [Android] 基于Android设备的网路流量监控分析器实作
- unix网络编程常用头文件