博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【leetcode】Reverse Linked List II (Java)
阅读量:7042 次
发布时间:2019-06-28

本文共 1324 字,大约阅读时间需要 4 分钟。

hot3.png

Reverse Linked List II

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->NULLm = 2 and n = 4,

return 1->4->3->2->5->NULL.

Note:

Given mn satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.

题意大致是把一部分链表反转一下。这道题我竟然自己做出来了,撒花撒花~~~(但是不确定是否满足限制条件

解题思路:

我觉得这道题对我来说主要的问题在于在不断地变化next时,如何去保证不会丢失节点;还有就是in-place和in one-pass的限制。这道题画图做比较方便。先上代码(虽然效率还是不高):

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    public ListNode reverseBetween(ListNode head, int m, int n) {        int index = 1;        if(m == 1){            ListNode root = new ListNode(0);            root.next = head;            m = 2;            n++;            ListNode start = root;            ListNode end = root;            while(index

我把题目大致解析成下图的样子:

152958_mzKe_2526106.jpg

可以看到涉及的修改在(m-1)到(n+1)节点之间,所以我首先(17~23行,33~39行)找到(m-1)的位置处,并且把(m-1)和m分别记作start和end节点。

在下图中大致分解了一次循环(25~29行,41~45行)的内容:

153002_rOjv_2526106.jpg

start和end保持不变,并且把他们的next都向后移动一个节点,然而这样的挪动会导致有一个节点没有next可以用来访问他,所以我就把这个节点在最开始记录为temp,然后再反向过来。做n-m次即可,最开始的while中index是表示找到的(m-1),在后面的while只是为了作为限制条件(n-m+m-1),没有特殊意义。

最后就得到了结果,在m=1时,我新建了一个root节点虚拟(13~16行),最后返回root.next即可,过程与不从头开始相同。

转载于:https://my.oschina.net/ruanhang1993/blog/536496

你可能感兴趣的文章
什么是Ajax
查看>>
Web前端——链接和表格使用规范
查看>>
2.6.18 32位环境 src.rpm包的使用
查看>>
Windows服务创建及安装
查看>>
我的友情链接
查看>>
【教程】Excel控件Spire.XLS 教程:在C#,VB.NET中添加Excel边框
查看>>
我的友情链接
查看>>
python-tag标记工具
查看>>
Python 学习练习之用户登录接口
查看>>
canvas制图
查看>>
【别人推荐】优秀博客、网站资源
查看>>
保税仓库
查看>>
linux帮助相关命令man、info、help
查看>>
学习笔记(六)——用户,用户组,切换登录用户
查看>>
装饰器和分布式计算
查看>>
Vue.js+Bootstrap构建todo
查看>>
Python27+Opencv3 VideoCapture FALSE问题记录
查看>>
如何在 Linux 系统查询机器最近重启时间
查看>>
jQuery插件学习(二)
查看>>
地图服务器控件GIS Map Server v3.6发布,新增航空影像数据集功能
查看>>