当前位置: 代码迷 >> Java相关 >> 求用链表实现回文数的Java程序
  详细解决方案

求用链表实现回文数的Java程序

热度:429   发布时间:2011-04-20 11:02:21.0
求用链表实现回文数的Java程序
RT
判断从键盘输入的一个数字是否是回文数,希望用Java的链表实现。
PS.回文数:正着和倒着读是一样的,比如121,2332等等。
多谢高手帮忙~~
搜索更多相关的解决方案: Java  

----------------解决方案--------------------------------------------------------
在学校的时候学过数据结构,遇见过类似的问题,可是不会用Java实现。
首先不知道怎么从键盘接受数据。。。
----------------解决方案--------------------------------------------------------
为何用链表?用String就好了.
程序代码:
import java.util.Scanner;
import java.io.InputStream;

/**
* Describe class test here.
*
*
* Created: Wed Apr 20 14:29:04 2011
*
*
@author <a href="mailto:enthusiasmer@gmail.com"></a>
*
@version 1.0
*/
public class test {

  /**
   * Creates a new <code>test</code> instance.
   *
   
*/
  public test() {

  }

  /**
   * Describe <code>main</code> method here.
   *
   *
@param args a <code>String</code> value
   
*/
  public static final void main(final String[] args) {
    String str = "";
    test me = new test();
    boolean flag;
    InputStream is = System.in;
    Scanner scan = new Scanner(is);   

    while (str.equals("quit")!=true)
    {
      System.out.println("please input a number:");
      str = scan.next();           

      flag = me.IsPalindrome(str);   

      System.out.println(flag);
    }

    System.out.println("bye");
  }



  /**
   * Describe <code>IsPalindrome</code> method here.
   *
   *
@param str a <code>String</code> value
   *
@return a <code>boolean</code> value
   
*/
  private boolean IsPalindrome(String str) {
    try {
      Integer.parseInt(str);
    } catch(NumberFormatException e) {
      return false;
    }
   

    int half;
    String tmpStr1, tmpStr2;

    half = str.length()/2;
    for (int i=0; i<half; i++) {
      tmpStr1 = str.substring(i, i+1);
      tmpStr2 = str.substring(str.length()-i-1, str.length()-i);
      if (tmpStr1.equals(tmpStr2)==false)
      {
        return false;
      }
    }
    return true;
  }
}


----------------解决方案--------------------------------------------------------
回复 3楼 machine_of_a
何不试试StringBuffer的reserve()方法?
----------------解决方案--------------------------------------------------------
程序代码:
public class main {
    public static void main(String args[]) throws IOException
    {
        int b;
        byte buffer[] = new byte[100];//字节流
      
        System.out.println("输入一行文本: ");
        b = System.in.read(buffer);
        b = b-2;
      
        LinkedList list = new LinkedList();
   
        while (list.size() != b)
        {
            list.add(buffer[list.size()]);
        }
   
        while (list.size() > 1)
        {
            Object a = list.getFirst();
            Object c = list.getLast();
            if (a.equals(c))
            {
                list.removeFirst();
                list.removeLast();
            }
            else
            {
                System.out.println("不是回文");
                System.exit(0);
            }
        }
      
        System.out.println("是回文");
    }
}

----------------解决方案--------------------------------------------------------
        b = System.in.read(buffer);
        b = b-2;
每当输入一串字符  b的值的大小都是比输入的可见字符数 多两个 所以就在这里减掉2

是不是回车也被记录啦?  

----------------解决方案--------------------------------------------------------
程序代码:
package test;
import java.awt.*;
import java.applet.*;
public class Main extends Applet{
    Label lab;
    TextField input;
    int a1,a2=0,k=0,a;
    public void init(){

        lab=new Label("请输入数据");
        input=new TextField(16);
        add(lab);
        add(input);

    }
    public boolean action(Event e,Object o){
        if(e.target==input)
        a1=Integer.parseInt(input.getText());
        k=a1;
        while(k<0||k>0)
        {
                    a=k%10;
            a2=10*a2+a;
            k=k/10;
        }
        if(a1==a2)
            showStatus("输入的数为"+a1+",该数为回文数");
        else
            showStatus("输入的数为"+a1+",该数不是回文数");
                input.setText("");
                a2=0;

    return true;
    }
}
以前做的。。用到小程序查看器。

----------------解决方案--------------------------------------------------------
还可以用char数组实现
程序代码:
package test;
import java.util.*;

//这个方法也可用于判断回文字符串
public class Main{
    public static String st;
    public static void type(){
        Scanner sc=new Scanner(System.in);
        st=sc.nextLine();
    }
    public static void main(String[] args){
        int len;
        System.out.println("输入一个数字");
        Main.type();
        len=st.length();
        char a[]=new char[len];
        a=st.toCharArray();
        for(int t=0;t<(len+1)/2;t++){
            if(a[t]!=a[len-t-1]){
                System.out.println("不是回文数!");
                break;   
            }
            if(t<(len-1)/2)  //用于判断是否检查完所有对应组
                continue;
            System.out.println("是回文数!");
        }
    }
}
不过怎么用链表我真不知道,,我java就没学过链表

[ 本帖最后由 ahphs 于 2011-4-22 10:56 编辑 ]
----------------解决方案--------------------------------------------------------
  相关解决方案