递归实现链表k个一组反转

链表中的节点每k个一组翻转

http://www.nowcoder.com/questionTerminal/b49c3dc907814e9bbfa8437c251b028e

  • 使用递归,时间复杂度O(n),空间复杂度O(1)

  • 为了方便处理,创建一个在head前面的节点hair.

  • 每次向递归方法中传入该组的头节点,头节点的上一个节点,以及个数k,然后对头节点后面的k个节点指针进行反转,首先判断是否需要反转,如果个数小于k则不需要反转,获得这个组最后一个节点的下一个节点,作为下一次递归调用的头节点,链表反转简单,三个指针pre,current,next即可。
    java实现代码:

    public class Solution {
      /**
       * 
       * @param head ListNode类 
       * @param k int整型 
       * @return ListNode类
       */
      public ListNode reverseKGroup (ListNode head, int k) {
          // write code here
          ListNode hair = new ListNode(0);
          hair.next = head;
          reverse(hair,head,k);
          return hair.next;
      }
    
      //返回该组反转后的尾节点的下一个
      public void reverse(ListNode pre,ListNode head,int k){
          int i = 0;
          ListNode pHead = head;
          while(pHead!=null&&i<k-1){
              i++;
              pHead = pHead.next;
          }
          if(i<k-1||pHead==null){
              pre.next = head;
              return;
          }
          ListNode groupNext = pHead.next;
          pre.next = pHead;
          //反转head后面的
          ListNode current = head;
          ListNode next = null;
          ListNode preNode = null;
          while(current!=null&&current!=groupNext){
              next = current.next;
              if(preNode!=null){
                  current.next=preNode;
                  preNode = current;
                  current = next;
              }else{
                  preNode = head;
                  preNode.next = pHead;
                  current = next;
              }
          }
          reverse(head,current,k);
      }
    }
全部评论

相关推荐

04-02 10:09
门头沟学院 Java
用微笑面对困难:这里面问题还是很多的,我也不清楚为啥大家会感觉没啥问题。首先就是全栈开发实习9个月的内容都没有java实习生的内容多,1整个技术栈没看出太核心和难点的内容,感觉好像被拉过去打杂了,而且全栈基本上很容易被毙。里面能问的bug是在太多了比如L:继承 BaseMapper 可直接使用内置方法’。请问你的 BaseMapper 是如何扫描实体类注解如果瞬时产生 100 个上传任务,MySQL 的索引设计是否会有瓶颈?你做过分库分表或者索引优化吗?全栈的内容可以针对动态难点去搞,技能特长写在下面吧,你写了这么多技能,项目和实习体现了多少?你可以在项目里多做文章然后把这个放下去,从大致来看实习不算太水,有含金量你也要写上内容针对哨兵里面的节点变化能问出一万个问题,这个很容易就爆了。
提前批简历挂麻了怎么办
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务