K组翻转链表
2016-07-14 17:07
302 查看
题目
给你一个链表以及一个k,将这个链表从头指针开始每k个翻转一下。链表元素个数不是k的倍数,最后剩余的不用翻转。
样例
给出链表 1->2->3->4->5
k = 2, 返回 2->1->4->3->5
k = 3, 返回 3->2->1->4->5
解题
同样用到递归的方式利用k找到需要翻转的部分链表,利用头插法进行翻转
注意当链表长度不足k个的时候不需要翻转,这里我是单独进行判断的。
前k个翻转好了
后面部分递归解决
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ public class Solution { /** * @param head a ListNode * @param k an integer * @return a ListNode */ public ListNode reverseKGroup(ListNode head, int k) { // Write your code here if(k==1) return head; if(head==null || head.next==null) return head; int kk = k; ListNode newHead = null; ListNode p = head; ListNode prev = null; ListNode pNext =null; int size = size(head); if(size<k) return head; while(k>=1){ k--; pNext = p.next; if(k==0){ newHead = p; } p.next = prev; prev = p; p = pNext; } ListNode lastNode = newHead; while(lastNode.next!=null){ lastNode = lastNode.next; } ListNode nextHead = reverseKGroup(pNext,kk); lastNode.next = nextHead; return newHead; } public int size(ListNode head){ int i = 0; while(head!=null){ i++; head = head.next; } return i; } }
相关文章推荐
- mysql trouble shooting---- 从库停止同步lock_wait_timeout_exceeded_try_restarting_transaction
- 内存一致性模型
- UML类图
- 使用 jQuery dataTables - 四种数据来源
- 决策树--总结
- 库区资金152.3元,项目金额3562.17万元及结转36532.15万元采用正则表达式表示
- android入门:zxing学习笔记(五)
- HeadFirstJava——11_异常处理
- Redis中的五种数据类型
- Hadoop集群磁盘数据迁移
- Java与MySQL的连接
- 一个简单得不能再简单的“ORM”了
- linux文件内容的复制与粘贴
- jquery操作select(取值,设置选中)
- SVN 设置钩子将代码同步到Web目录下面
- 苹果企业账号发布APP详解——通过自己网站分发应用
- 使用Flexible实现手淘H5页面的终端适配
- view的frame高度根据键盘出现、消失改变
- 利用JavaScript中的正则表达式实现常用输入框的验证
- github使用新手教程