`
YuHuang.Neil
  • 浏览: 187660 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Algorithm 02 : 以K个元素为一组逆转链表

阅读更多
Question : Reverse a Linked List in groups of given size K.

问题:以K个元素为一组逆转链表。

/**
  * @author YuHuang
  * @vision 2011-10-03
  * This program is only for algorithm training.
  *
  */


class Node {
        public int data;
        public Node next;
}

class LinkedList {
        private Node head;
        private int size;

        public LinkedList(int size){
                this(new int[size]);
        }

        public LinkedList(int[] initArray){
                int len = initArray.length;
                if(len>0){
                        int count=len;
                        Node preNode=null;

                        while(--count>=0){
                                Node node = new Node();
                                node.data=initArray[count];
                                node.next=preNode;
                                preNode=node;
                        }
                        head = new Node();
                        head.next=preNode;
                }
                this.size = len;
        }

        public Node getHead() {
                return this.head;
        }

        public void resetHead(Node node){
                this.head.next=node;
        }
}

public class ReverseLinkedListByGroup {

        public static void doReverse(LinkedList list,int k){
                Node prev=null,next=null;
                Node r=null;
                Node head=null;

                int count;

                if(list==null){
                        return;
                }

                Node current = list.getHead().next;
                Node p;

                while(current!=null){
                        count=k;
                        p=current;
                        while(current!=null && --count>=0){
                                next = current.next;
                                current.next=prev;
                                prev = current;
                                current = next;
                        }

                        if(r==null) {
                                r=prev;
                        }else{
                                head.next=prev;
                        }
                        head=p;
                        head.next=null; //remember to set null to head.next in order to stop the progrom
                }
                list.resetHead(r);
        }


        public static void main(String[] args){
                int[] initArray=new int[]{1,2,3,4,5,6,7,8,9,10};
                LinkedList list=new LinkedList(initArray);

                Node node = list.getHead().next;

                System.out.println("Before Reversed : ");
                while(node!=null){
                        System.out.print(node.data+" ");
                        node = node.next;
                }
                System.out.println();

                ReverseLinkedListByGroup.doReverse(list,3);
                node=list.getHead().next;

                System.out.println("After Reversed : ");
                while(node!=null){
                        System.out.print(node.data+" ");
                        node = node.next;
                }
                System.out.println();

        }
}





运行结果为:

Lab-Computer-0db2f6:JavaExercises labuser$ java ReverseLinkedListByGroup
Before Reversed :
1 2 3 4 5 6 7 8 9 10
After Reversed :
3 2 1 6 5 4 9 8 7 10


分享到:
评论

相关推荐

    java.lang.RuntimeException: Unsupported algorithm: HmacSHA1解决方法

    java.lang.RuntimeException: Unsupported algorithm: HmacSHA1 解决方法,阿里云

    pentaho-aggdesigner-algorithm-5.1.5-jhyde-API文档-中文版.zip

    赠送jar包:pentaho-aggdesigner-algorithm-5.1.5-jhyde.jar; 赠送原API文档:pentaho-aggdesigner-algorithm-5.1.5-jhyde-javadoc.jar; 赠送源代码:pentaho-aggdesigner-algorithm-5.1.5-jhyde-sources.jar; ...

    经典算法大全.pdf

    产生可能的集合 68 30.Algorithm Gossip: m元素集合的n个元素子集 71 31.Algorithm Gossip: 数字拆解 73 32.Algorithm Gossip: 得分排行 76 33.Algorithm Gossip: 选择、插入、气泡排序 78 34....

    Java经典问题算法大全

    5.Algorithm Gossip: 老鼠走迷官(一) 6.Algorithm Gossip: 老鼠走迷官(二) 7.Algorithm Gossip: 骑士走棋盘 8.Algorithm Gossip: 八皇后 9.Algorithm Gossip: 八枚银币. 10.Algorithm Gossip: 生命游戏. 11....

    pentaho-aggdesigner-algorithm-5.1.5-jhyde.jar.zip

    解决maven引入hive的jar包时依赖报错Could not find artifact org.pentaho:pentaho-aggdesigner-algorithm:pom:5.1.5-jhyde in xxx的问题,maven路径org/pentaho/pentaho-aggdesigner-algorithm/5.1.5-jhyde/pentaho...

    pentaho-aggdesigner-algorithm-5.1.5-jhyde.jar

    可以解决,maven引入hive jar包时,hive Could not find artifact org.pentaho:pentaho-aggdesigner-algorithm:jar:5.1.5-jhyde 问题

    pentaho-aggdesigner-algorithm-5.1.5-jhyde.tar

    解决 Cannot resolve org.pentaho:pentaho-aggdesigner-algorithm:5.1.5-jhyde jar放入D根目录执行: 以下命令加入本地maven库 mvn install:install-file -DgroupId=org.pentaho -DartifactId=pentaho-aggdesigner-...

    经典算法大全

    5.Algorithm Gossip: 老鼠走迷官(一) 9 6.Algorithm Gossip: 老鼠走迷官(二) 11 7.Algorithm Gossip: 骑士走棋盘 13 8.Algorithm Gossip: 八皇后 16 9.Algorithm Gossip: 八枚银币 18 10.Algorithm ...

    Concave hull: A k-nearest neighbor algorithm:Concave hull: 一种用于计算一组点占据的区域的 k-nearest neighbor 方法-matlab开发

    所提出的算法基于 k 最近邻方法,其中 k 的值是唯一的算法参数,用于控制最终解决方案的“平滑度”。 该算法的思想属于: 莫雷拉、阿德里亚诺... Concave hull:用于计算由一组点占据的区域的 k 最近邻方法.. 61-68。

    CList链表的一个拓展用法

    它维护了一个双向链表,每个元素都有前一个和后一个指针,允许双向遍历。`CList`提供了丰富的成员函数,用于添加、删除、查找和遍历元素,使得操作链表变得非常方便。 在标准的`CList`用法中,我们可以使用`AddHead...

    Algorithm.rar_Algorithm Gossip_gossip_gossip algorithm_gossip算法

    2.Algorithm Gossip: 费式数列 3. 巴斯卡三角形 4.Algorithm Gossip: 三色棋 5.Algorithm Gossip: 老鼠走迷官 6.Algorithm Gossip: 老鼠走迷官(二) 7.Algorithm Gossip: 骑士走棋盘 8.Algorithm Gossip: 八皇 9....

    链表的19种算法(C语言)

    1. **创建链表**:创建一个空链表,通常涉及到初始化头节点,头节点通常不存储数据,仅用于指向第一个元素。 2. **插入节点**:在链表的特定位置(如开头、末尾或中间)插入新节点。插入操作需要更新前后节点的指针...

    pentaho-aggdesigner-algorithm-5.1.5-jhyde.zip

    org / pentaho / pentaho-aggdesigner-algorithm / 5.1.5-jhyde / pentaho-aggdesigner-algorithm-5.1.5-jhyde.jar,解决maven引入hive的jar包时依赖报错Could not find artifact org.pentaho:pentaho-aggdesigner-...

    Algorithm::Evolutionary-开源

    开源项目"Algorithm::Evolutionary"就是这样一个专为执行简单进化计算任务而设计的库,它为开发者提供了一套强大的工具,以实现基于进化策略的解决方案。 "Algorithm::Evolutionary"库的核心特性在于其灵活的架构和...

    algorithm: analysis and design exams

    这一过程可以被归纳为一个循环不变量:在处理第j个元素时,前j-1个元素已经正确排序。 **2. 时间复杂度分析(b)** - **问题描述:** 这种排序方法的时间复杂度是多少? - **解答要点:** 该方法的时间复杂度由二...

    Algorithm::MatchingModel-开源

    本文将深入探讨开源项目"Algorithm::MatchingModel",这是一个用Perl语言编写的库,专为解决双面匹配问题而设计。 首先,我们要理解什么是双面匹配问题。在现实世界中,许多匹配场景涉及到两方之间的匹配,如学生与...

Global site tag (gtag.js) - Google Analytics