zoukankan      html  css  js  c++  java
  • 某书2018提前批笔试题之单链表奇偶位置元素互换

    一、题目

      以字符串形式构成单链表,将所有奇数位置上的元素一起前置到所有偶数位置上的元素,不能申请额外空间,在o(n)时间内完成。
    二、思路

          多找几个指针,动态链接,详见代码注释。

    三、代码

    package redbook;
    
    import java.util.Scanner;
    
    /**
     * 题目:
        以字符串形式构成单链表,将所有奇数位置上的元素一起前置到所有偶数位置上的元素的前面,不能申请额外空间,在o(n)时间内完成。
        例如:
            输入:1->2->3->4->5->6->7->8
            输出:1->3->5->7->2->4->6->8->NULL
       思路:
        多找几个指针,动态链接。
    */
    
     public class Main3 {
        public static void main(String[] args) {
            Scanner in=new Scanner(System.in);
            while (in.hasNext()){
                //输入字符串
                String line=in.nextLine();
                //切割字符串
                String[] arr=line.split("->");
                //调用交换的方法
                changeMethod(arr);
            }
            in.close();
        }
    
        public static void changeMethod(String[] arr){
            //创建单链表
            listNode oddPointer=null;
            listNode pointer=null;
    
            oddPointer=new listNode(Integer.parseInt(arr[0]),null);
            pointer=oddPointer;
    
            for(int i=1;i<arr.length;i++){
                if(!arr[i].equals("NULL")){
                    pointer.next=new listNode(Integer.parseInt(arr[i]),null);
                    pointer=pointer.next;
                }
            }
    
            //换位置
            boolean flag=true;
            listNode oddHeadPointer=oddPointer; //保存奇数位置头指针
            listNode evenPointer=null;//偶数位置指针
            listNode evenHeadPointer=null;//偶数位置头指针
    
            if(oddHeadPointer.next!=null){
                evenHeadPointer=evenPointer=oddHeadPointer.next;//初始化偶数位置头指针
                pointer=evenPointer.next;//创建滑动的指针
    
                while(pointer!=null){
                    if(flag==true){  //创建奇数位置数字的链表
                        oddPointer.next=pointer;
                        pointer=pointer.next;
                        oddPointer=oddPointer.next;
                        flag=false;
                    }else{ //创建偶数位置数字的链表
                        evenPointer.next=pointer;
                        pointer=pointer.next;
                        evenPointer=evenPointer.next;
                        flag=true;
                    }
                }
                evenPointer.next=null;
                oddPointer.next=evenHeadPointer; //把偶数位置的链表接在奇数位置链表的后面
            }
    
            //打印输出换好位置的链表
            while(oddHeadPointer!=null){
                System.out.print(oddHeadPointer.val+"->");
                oddHeadPointer=oddHeadPointer.next;
            }
            System.out.print("NULL");
            System.out.println();
        }
    
    
        //链表节点类
        public static class listNode{
            int val;
            listNode next;
            listNode(int val,listNode node){
                this.val = val;
                this.next = node;
            }
        }
    
    }
    View Code

    ---------------------------------------------

    参考链接:

    http://blog.csdn.net/yingzizizizizizzz/article/details/75452291

  • 相关阅读:
    字节流
    A、B
    rollup
    使用nodejs提供动态javascript文件
    nodejs服务器部署
    A js 中加载Bjs

    01月05日22:14:32 学习进度笔记
    01月07日19:10:50 学习进度笔记
    01月07日18:53:49 学习进度笔记
  • 原文地址:https://www.cnblogs.com/hezhiyao/p/7726127.html
Copyright © 2011-2022 走看看