Reverse Nodes in k-Group,LeetCode
来源:互联网 发布:python 键盘控制程序 编辑:程序博客网 时间:2024/06/05 04:21
前面一题是只调换两个数,所以添加两个引用就可以解决了,多了一个变量K,这个方法就不再适用了,因此我另外想了一个截然不同的方法。
上代码,这题貌似是截止目前为止提交次数最多的一题,终于看到绿色的accepted之后激动地点了个夜宵,扯远了,代码中的个别细节的确值得琢磨
public ListNode reverseKGroup(ListNode head, int k) {if(head == null) {return null;}ListNode myHead = head;ListNode temp = head;ArrayList<ListNode> list = new ArrayList<>();do {list.add(temp);temp = temp.next;}while(temp != null);int n = list.size();if(n < k || n == 1 || k == 1) {return head;}while(n >= k) {if(n == list.size()) {myHead = list.get(k - 1);myHead.next = list.get(k - 2);list.get(0).next = list.get(k - 1).next;for(int i = 1;i < k - 1;i++) {list.get(i).next = list.get(i - 1);}}else {list.get(list.size() - n - k).next = list.get(list.size() - n + k - 1);list.get(list.size() - n).next = list.get(list.size() - n + k - 1).next;for(int i = 1;i < k;i++) {list.get(list.size() - n + i).next = list.get(list.size() - n + i -1);}}n -= k;}return myHead;}
先是一些特殊情况的处理,由于考虑不周,大部分情况都是在提交失败之后才留意到的。
然后是对“正常”情况的处理。贴一段抄来的文字,来自 ArrayList 和LinkedList 的优缺点
- 如果应用需要快速访问数据,很少或不插入和删除元素,就应该用数组,也就是ArrayList;
- 如果应用需要经常插入和删除元素你就需要用链表数据结构了,也就是LinkedList。
要实现翻转,只需要改变指针的指向就可以了,无需改变ArrayList中元素的位置
我实现翻转的顺序是从链表头开始,每找到K个节点,转,不足K个节点了,也就结束了
在代码实现上,没有想到什么好的方法,因此头K个节点的翻转和后面节点的翻转只能分开处理
下面记录一下花费我时间最多的点。
假设原链表是0,1,2,3,4,5,6,7,K是3
第一次循环,头节点定为2 , 2指向1 , 1指向0 , 0指向3
第二次循环,要注意是0指向5,而不是2指向5
写出来才发现是这么简单的一个细节,顿时感觉半小时之前的自己有点zz了。
0 0
- 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
- 【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
- 【Leetcode】Reverse Nodes in k-Group
- LeetCode Reverse Nodes in k-Group
- [Leetcode] Reverse Nodes in k-Group (Java)
- LeetCode(25)Reverse Nodes in K-Group
- [模板]求最长公共子序列
- C了个++:03 - C++的字符串与 string 类
- windows学习笔记2进程
- 吴韦朋:一个“深漂”从零到百万的365天创业日记(连载5)
- hdu1272 并查集
- Reverse Nodes in k-Group,LeetCode
- 为什么full join 会报错?而right(left) join没问题?
- 快速集成 iMessage (上)
- Leetcode 63. Unique Paths II (Medium) (java)
- 备忘录(需要以后自己详细记录学习的知识点)
- android模拟器-文件位置
- ViewPager切换滑动速度修改
- 【Thinking in Java】多态
- 关于android推送