LeetCode 25: Reverse Nodes in k-Group
来源:互联网 发布:dos命令执行java程序 编辑:程序博客网 时间:2024/06/13 22:46
原题链接在此:https://leetcode.com/problems/reverse-nodes-in-k-group/
这题是第24题——交换相邻节点的升级版。这道题想到思路并不难,也是比较自然的,但是在写的时候要注意一些边界条件、临时变量的选取和作用域等细节,容易写错。
算法思路是:把k个节点当做一个group,一次尝试遍历k个节点,若能找到这个group的尾节点,则把这个group的节点翻转,否则不翻转。
public ListNode reverseKGroup(ListNode head, int k) { ListNode lastGroupHead = null; ListNode nextGroupHead = head; // 要返回的链表的头节点 ListNode listHead = null; ListNode currGroupHead = null; // 若有下一个group head的时候 while (nextGroupHead != null) { ListNode currGroupTail = null; // 当前group翻转过后的新头节点 ListNode newGroupHead = null; lastGroupHead = currGroupHead; currGroupHead = nextGroupHead; nextGroupHead = null; ListNode temp = currGroupHead; // 当前group的节点计数 int groupNum = 0; // 尝试找当前group的tail while (true) { if (temp == null) break; groupNum++; if (groupNum == k) { // 找到了当前group的尾节点 currGroupTail =temp; nextGroupHead = currGroupTail.next; break; } temp = temp.next; } // 若找到了group tail,则reverse这个group if (currGroupTail != null) { ListNode prev = null; ListNode curr = currGroupHead; ListNode next = currGroupHead.next; while (true) { curr.next = prev; if (curr == currGroupTail) break; prev = curr; curr = next; next = next.next; } newGroupHead = currGroupTail; } else { newGroupHead = currGroupHead; } // listHead初始化为第一个group头节点 if (listHead == null) listHead = newGroupHead; // 上个group尾部连接到这个group if (lastGroupHead != null) lastGroupHead.next = newGroupHead; } return listHead; }
这里有人提出了更简洁的解法,主要思想是:一是加入空节点作为头节点,二是将翻转group的逻辑封装成一个函数:http://www.cnblogs.com/lichen782/p/leetcode_Reverse_Nodes_in_kGroup.html
阅读全文
0 0
- LeetCode(25)Reverse Nodes in K-Group
- [leetcode 25]Reverse Nodes in k-Group
- [leetcode #25]Reverse Nodes in k-Group
- leetcode 25 Reverse Nodes in k-Group
- Leetcode 25 Reverse Nodes in k-Group
- LeetCode 25 - Reverse Nodes in k-Group
- LeetCode 25: Reverse Nodes in k-Group
- leetcode 25 -- Reverse Nodes in k-Group
- leetcode 25:Reverse Nodes in k-Group
- leetcode 25: Reverse Nodes in k-Group
- [Leetcode 25] Reverse Nodes in k-Group
- Leetcode#25||Reverse Nodes in k-Group
- LeetCode 25 Reverse Nodes in k-Group
- leetcode-25 Reverse Nodes in k-Group
- LeetCode 25: Reverse Nodes in k-Group
- Leetcode #25 Reverse Nodes in k-Group
- LeetCode 25:Reverse Nodes in k-Group
- LeetCode 25 - Reverse Nodes in k-Group
- 安装MyEclipse2017 出现 network setup 问题,解决办法
- Xcode消除警告
- 进程间通信之共享内存技术
- Palindromic Numbers LightOJ
- OSError: [Errno 13] 权限不够: '/usr/local/lib/python2.7/dist-packages/cmake'
- LeetCode 25: Reverse Nodes in k-Group
- 阿里Druid连接池的坑。。
- Javascript—运算符
- POJ
- SSH框架——(二)四层结构:DAO,Service,Controller,View层
- JAVA中迭代列表中数据时的几种循环写法
- 如何创建一个Maven Web项目
- R语言实战 第2版 中文目录
- 常见哈希冲突解决办法: