[LeetCode]Reverse Nodes in k-Group, 解题报告
来源:互联网 发布:淘宝排名权重 编辑:程序博客网 时间:2024/04/30 11:10
前言
今天收到了阿里的电子入职offer,看岗位的要求是要熟悉linux内核,迅速入手了一本《Linux内核设计与实现》,入职前希望能翻完一遍,在亚马逊货到付款下周二才能送到,这两天还是按部就班的写写LeetCode代码
题目
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.
If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is.
You may not alter the values in the nodes, only nodes itself may be changed.
Only constant memory is allowed.
For example,
Given this linked list: 1->2->3->4->5
For k = 2, you should return: 2->1->4->3->5
For k = 3, you should return: 3->2->1->4->5
If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is.
You may not alter the values in the nodes, only nodes itself may be changed.
Only constant memory is allowed.
For example,
Given this linked list: 1->2->3->4->5
For k = 2, you should return: 2->1->4->3->5
For k = 3, you should return: 3->2->1->4->5
思路
题目比较容易理解,因为涉及到的指针操作较多,所以这里也记录一下。解题方法:
- 处理特殊的情况,例如指针为空,翻转数k为1
- 获取需要翻转的次数,次数 = 节点总数 / k
- 将翻转k个节点抽象成局部函数,供主函数调用即可
AC代码
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public static ListNode reverseKGroup(ListNode head, int k) { int count = 0; ListNode p = head; while (p != null) { count ++; p = p.next; } // special case if (count < k || k == 1) { return head; } // loop count int loopCount = count / k; // local variable ListNode safeNode = new ListNode(Integer.MAX_VALUE); safeNode.next = head; ListNode pre = safeNode; ListNode cur = head; for (int i = 0; i < loopCount; i ++) { ListNode tmp = reverseK(cur, k); pre.next = tmp; ListNode tmpPre = null; ListNode tmpCur = tmp; for (int j = 0; j < k; j ++) { tmpPre = tmpCur; tmpCur = tmpCur.next; } pre = tmpPre; cur = tmpCur; } return safeNode.next; } public static ListNode reverseK(ListNode head, int k) { ListNode pre = null; ListNode cur = head; ListNode post = null; for (; k > 0 && cur != null; k --) { post = cur.next; cur.next = pre; pre = cur; cur = post; } head.next = cur; return pre; }}
0 0
- [LeetCode]Reverse Nodes in k-Group, 解题报告
- 【LeetCode】Reverse Nodes in k-Group 解题报告
- LeetCode解题报告--Reverse Nodes in k-Group
- [leetcode] 25. Reverse Nodes in k-Group 解题报告
- [LeetCode] Reverse Nodes in k-Group 解题报告
- [Leetcode] 25. Reverse Nodes in k-Group 解题报告
- Leetcode #25 Reverse Nodes in k-Group K区间链表交换 解题报告
- Reverse Nodes in k-Group——解题报告
- leetcode解题方案--025--Reverse Nodes in k-Group
- LeetCode:Reverse Nodes in k-Group
- LeetCode: Reverse Nodes in k-Group
- LeetCode : Reverse Nodes in k-Group
- leetcode 42: Reverse Nodes in k-Group
- [Leetcode] reverse nodes in K-Group
- [LeetCode]Reverse Nodes in k-Group
- LeetCode-Reverse Nodes in k-Group
- LeetCode - Reverse Nodes in k-Group
- LeetCode | Reverse Nodes in k-Group
- 把窗体客户区图像保存到文件或剪切板
- Android 如何设置视频来电的默认铃声
- 2:字符串插入
- oracle归档日志
- redhat 企业版5.4 使界面支持中文的方法
- [LeetCode]Reverse Nodes in k-Group, 解题报告
- Pascal's Triangle II
- 【索引】CodeForces Round #228 (Div. 2)
- 文字的高度与宽度: Canvas.TextExtent
- 关于Oracle数据和对象的导入导出
- Android [2G/FDD]关闭GSM四频和HSPA方法
- NYOJ 611 练练
- Java中static和volatile的区别
- 半角转变为全角