【LeetCode】Reverse Linked List II 解题报告
来源:互联网 发布:python datetime 比较 编辑:程序博客网 时间:2024/04/29 17:06
【题目】
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到n的部分反转(1<=m<=n<=length)。
注意要求:在原地反转,也就是不能申请额外的空间,且只能遍历一遍。
自然而然想到把链表分为三部分,重点是如何遍历一遍把中间部分反转?借助两个指针,tmpHead和tmpNext,tmpHead是遍历反转后的head,tmpNext始终是tmpHead反转后的next。
直接看代码吧,代码中有注释,不懂的请留言。
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { // Divide the list to three parts: // 1)Nodes before m keep still; // 2)Traverse m~n nodes; // 3)Nodes after n keep still. public ListNode reverseBetween(ListNode head, int m, int n) { if (m == n) return head; ListNode preHead = new ListNode(0); preHead.next = head; // The (m-1) node is the tail of first tail. ListNode firstTail = preHead; int k = m - 1; while (k-- > 0) { firstTail = firstTail.next; } // The m-th node is the traversed tail. ListNode secondTail = firstTail.next; // Traverse m~n nodes, and get the traversed head. ListNode tmpHead = null; ListNode tmpNext = null; ListNode node = firstTail.next; k = n - m + 1; while (k-- > 0) { tmpHead = node; node = node.next; tmpHead.next = tmpNext; tmpNext = tmpHead; } // Connect three parts. firstTail.next = tmpHead; secondTail.next = node; return preHead.next; }}
指针关系比较复杂,想清楚了在写代码。
相关题目: 【LeetCode】Reverse Nodes in k-Group 解题报告
0 0
- [LeetCode]Reverse Linked List II, 解题报告
- [LeetCode]Reverse Linked List II解题报告
- 【LeetCode】Reverse Linked List II 解题报告
- [LeetCode] Reverse Linked List II 解题报告
- [leetcode] 92. Reverse Linked List II 解题报告
- [Leetcode] 92. Reverse Linked List II 解题报告
- LeetCode-Reverse Linked List-解题报告
- [leetcode] 206. Reverse Linked List 解题报告
- 【LeetCode】Reverse Linked List 解题报告
- LeetCode 206. Reverse Linked List 解题报告
- [Leetcode] 206. Reverse Linked List 解题报告
- Leetcode 92. Reverse Linked List II 翻转链表2 解题报告
- Reverse Linked List 解题报告
- 【LeetCode】206.Reverse Linked List(Easy)解题报告
- LeetCode[Linked List]: Reverse Linked List II
- LeetCode: Reverse Linked List II
- LeetCode: Reverse Linked List II
- [LeetCode] Reverse Linked List II
- 以jar的形式导出java工程,用批处理命令或者dos下直接写命令,处理java工程
- 学习《Mongodb权威指南》学习笔记 (二)
- ViewPager滚动监听解释
- SizeClass和AutoLayout教程1
- QString 转 double、 float、 int、 char*
- 【LeetCode】Reverse Linked List II 解题报告
- 网页上预览pdf文件的几种方案
- 零散笔记查询汇总
- arm汇编—bic ,orr
- JQuery Mobile Page写法
- UVa 10069 - Distinct Subsequences
- Oracle11gR2——RAC中的参数文件
- 利用Visual GDB在Visual Studio中进行Android开发
- [MFC]ListCtrl的扩展用法