92 Reverse Linked List II
2015-11-21 16:10
423 查看
题目链接:https://leetcode.com/problems/reverse-linked-list-ii/
题目:
解题思路:
这道题的考点还是链表就地逆置。没特别的新意。
因为给定的链接没有头结点,当逆置涉及到第一个节点时,操作会较其它有所不同,所以最好自己加上一个头结点。
逆置时,要找到两个最重要的节点。
第一个是,第 m 个结点的前驱。这样能容易地摘下第 m 个结点。
第二个是,第 n 个结点。使被逆置的结点方便地插入到第 n 个结点之后。
代码实现:
题目:
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 个结点的前驱。这样能容易地摘下第 m 个结点。
第二个是,第 n 个结点。使被逆置的结点方便地插入到第 n 个结点之后。
代码实现:
/** * 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) { if(head == null || head.next == null) return head; ListNode headList = new ListNode(0); headList.next = head; ListNode p = headList; int start = m; while(start -- > 1) p = p.next; ListNode q = p; start = m; while((n - start) >= 0) { q = q.next; start ++; } while(p.next != q) { ListNode tmp = p.next; p.next = tmp.next; tmp.next = q.next; q.next = tmp; } return headList.next; } }
44 / 44 test cases passed. Status: Accepted Runtime: 0 ms
相关文章推荐
- 【Leetcode】Binary Tree Level Order Traversal II
- PHP编译configure时常见错误
- 安卓源码--切换阿拉伯语重启机器报错
- POJ2985 The k-th Largest Group(Splay)
- 斐波那契首项 BAPC2014 I&&HUNNU11589:Interesting Integers
- Android Studio配置教程
- zabbix搭建与基本配置
- nginx多站点配置
- 关闭error, forbidden warning
- 浅谈在三级城市如何运营一家网络公司
- JSP 、J2EE 、C# 、asp.net 、vb、VB.net、php、 Android,FPGA,MATLAB,QT,程序开发
- DIV+CSS规范命名
- 分享一个基于长连接+长轮询+原生的JS及AJAX实现的多人在线即时交流聊天室
- 关于读取数据库进行数据处理的一些小问题
- jquery效果队列
- 新入此地,请多关照
- 用dblink从源数据库导出expdp文件到目标数据库
- MatConvNet教程----- Win7下编译和配置详解
- cocos2d-x 植入广告(二) 有米横屏、插屏广告和积分墙广告
- PHP文件上传大小限制修改