zoukankan      html  css  js  c++  java
  • 调整数组顺序使奇数位于偶数前面

    这道题,思考过,目前想的解决方案是使用双链表解决。

    下面贴自己的Java代码实现:

    /**
     * 题目描述:
     * 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,
     * 使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,
     * 并保证奇数和奇数,偶数和偶数之间的相对位置不变。
     *
     * @author ihaokun
     * @date 2019/7/14 21:00
     */
    public class ReOrderArray {
    
        public static void main(String[] args) {
            reOrderArray(new int[]{1, 2, 3, 4, 5});
        }
    
        /**
         * 初步审题,感觉数组操作add、delete不方便
         * 把它变成链表再进行排序操作,最后转化为数组
         *
         * @param array 整数数组
         */
        public static void reOrderArray(int[] array) {
            // 奇数节点、偶数节点,先设置为null
            DoubleLinkedList oddNumNode = new DoubleLinkedList();
            DoubleLinkedList evenNumNode = new DoubleLinkedList();
            for (int num : array) {
                DoubleLinkedList node;
                if (num % 2 == 1) {
                    node = new DoubleLinkedList(num, oddNumNode,null);
                    oddNumNode.next = node;
                    oddNumNode = oddNumNode.next;
                } else if (num % 2 == 0){
                    node = new DoubleLinkedList(num, evenNumNode, null);
                    evenNumNode.next = node;
                    evenNumNode = evenNumNode.next;
                }
            }
            while (evenNumNode.prev != null){
                evenNumNode = evenNumNode.prev;
            }
            // 除去偶数首位的0
            evenNumNode = evenNumNode.next;
            // 先奇后偶
            oddNumNode.next = evenNumNode;
            while (oddNumNode.prev != null){
                oddNumNode = oddNumNode.prev;
            }
            // 除去奇数首位的0
            oddNumNode = oddNumNode.next;
            // 排序后结果:
            while (oddNumNode != null){
                System.out.println(oddNumNode.value);
                oddNumNode = oddNumNode.next;
            }
        }
    
        private static class DoubleLinkedList {
            private int value;
            private DoubleLinkedList prev;
            private DoubleLinkedList next;
    
            private DoubleLinkedList(){
    
            }
            private DoubleLinkedList(int value, DoubleLinkedList prev, DoubleLinkedList next){
                this.value = value;
                this.prev = prev;
                this.next = next;
            }
        }
    }
  • 相关阅读:
    《House of Cards》观后感
    几个常见的壳的脱壳
    【转】Arp的攻防实战
    Back Track 5 之 漏洞攻击 && 密码攻击 && Windows下渗透工具
    Back Track 5 之 Web踩点 && 网络漏洞
    Back Track 5 之 网络踩点(二)
    Back Track 5 之 网络踩点
    51单片机总线与非总线的程序对比
    关于PHP写的投票网站之刷票终结版
    关于PowerShell中的命令的别名
  • 原文地址:https://www.cnblogs.com/ihaokun/p/11191383.html
Copyright © 2011-2022 走看看