递归实现链表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);
      }
    }
全部评论

相关推荐

11-29 11:21
门头沟学院 Java
点赞 评论 收藏
分享
评论
1
收藏
分享
正在热议
# 25届秋招总结 #
442870次浏览 4513人参与
# 春招别灰心,我们一人来一句鼓励 #
42047次浏览 534人参与
# 北方华创开奖 #
107453次浏览 600人参与
# 地方国企笔面经互助 #
7969次浏览 18人参与
# 同bg的你秋招战况如何? #
76925次浏览 565人参与
# 实习必须要去大厂吗? #
55786次浏览 961人参与
# 阿里云管培生offer #
120340次浏览 2220人参与
# 虾皮求职进展汇总 #
115973次浏览 886人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
11632次浏览 289人参与
# 实习,投递多份简历没人回复怎么办 #
2454828次浏览 34858人参与
# 提前批简历挂麻了怎么办 #
149917次浏览 1978人参与
# 在找工作求抱抱 #
906063次浏览 9421人参与
# 如果公司给你放一天假,你会怎么度过? #
4760次浏览 55人参与
# 你投递的公司有几家约面了? #
33209次浏览 188人参与
# 投递实习岗位前的准备 #
1195992次浏览 18550人参与
# 机械人春招想让哪家公司来捞你? #
157640次浏览 2267人参与
# 双非本科求职如何逆袭 #
662310次浏览 7397人参与
# 发工资后,你做的第一件事是什么 #
12786次浏览 62人参与
# 工作中,努力重要还是选择重要? #
35857次浏览 384人参与
# 简历中的项目经历要怎么写? #
86928次浏览 1516人参与
# 参加完秋招的机械人,还参加春招吗? #
20142次浏览 240人参与
# 我的上岸简历长这样 #
452040次浏览 8089人参与
牛客网
牛客企业服务