求用链表实现回文数的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;
}
}
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("是回文");
}
}
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;
}
}
以前做的。。用到小程序查看器。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就没学过链表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("是回文数!");
}
}
}
[ 本帖最后由 ahphs 于 2011-4-22 10:56 编辑 ]
----------------解决方案--------------------------------------------------------