zoukankan      html  css  js  c++  java
  • LeetCode 25 Reverse Nodes in k-Group Add to List (划分list为k组)

     
    Problem :将一个有序list划分为k个组,并且每个组的元素逆置
     
    链表操作 :递归算法 
        每次寻找到该组的尾部,然后进行逆置操作,返回头部,这样每次递归操作之后能够进行下一次的逆置操作。
        链表操作画图比较形象!!!!
    对于递归算法:找到共同点,找到程序退出点,注意特殊情况
          本题中,共同点为每组为k个节点,并且每组进行的操作均为逆置操作。
          程序退出点,每次返回逆置后的头部,这样最终结果为头部
    特殊情况:该链表中的节点个数不是k的整数倍,最后剩下的不需要进行逆置操作!!
     
    参考代码:
    package leetcode_50;
    
    
    /***
     * 
     * @author pengfei_zheng
     * list划分为k组并且逆置
     */
    public class Solution25 {
        public class ListNode {
             int val;
             ListNode next;
             ListNode(int x) { val = x; }
         }
        public ListNode reverseKGroup(ListNode head, int k) {
            ListNode curr = head;
            int count = 0;
            while (curr != null && count != k) { // find the k+1 node
                curr = curr.next;
                count++;
            }
            if (count == k) { // if k+1 node is found
                curr = reverseKGroup(curr, k); // reverse list with k+1 node as head
                // head - head-pointer to direct part, 
                // curr - head-pointer to reversed part;
                while (count-- > 0) { // reverse current k-group: 
                    ListNode tmp = head.next; // tmp - next head in direct part
                    head.next = curr; // preappending "direct" head to the reversed list 
                    curr = head; // move head of reversed part to a new node
                    head = tmp; // move "direct" head to the next node in direct part
                }
                head = curr;
            }
            return head;
        }
    }
     
  • 相关阅读:
    c#多线程
    把.NET程序部署到没有安装.NET Framwork的机器上
    Java字符编码转换过程说明
    Window 消息大全使用详解
    Regsvr32
    VC++的应用程序框架中各类之间的访问方法
    java接收中文输入并正常显示
    Visual C#中的数据绑定
    截取系统 API 调用(转)
    几个操作文件的API函数
  • 原文地址:https://www.cnblogs.com/zpfbuaa/p/6527370.html
Copyright © 2011-2022 走看看