用Java写一个链栈程序:判断一个输入的字符串是否符合正读和反读都相等的要求
时间: 2024-04-30 09:25:09 浏览: 62
java判断一个字符串是否对称
以下是用Java实现链栈判断回文字符串的程序:
```java
import java.util.Scanner;
class Node {
char data;
Node next;
public Node(char data) {
this.data = data;
this.next = null;
}
}
class Stack {
private Node top = null;
public void push(char c) {
Node newNode = new Node(c);
newNode.next = top;
top = newNode;
}
public char pop() {
if (top == null) {
return ' ';
}
char data = top.data;
top = top.next;
return data;
}
public boolean isEmpty() {
return top == null;
}
}
public class PalindromeStack {
public static boolean isPalindrome(String str) {
Stack stack = new Stack();
int len = str.length();
for (int i = 0; i < len / 2; i++) {
stack.push(str.charAt(i));
}
if (len % 2 != 0) {
stack.pop();
}
for (int i = len / 2; i < len; i++) {
char c = stack.pop();
if (c != str.charAt(i)) {
return false;
}
}
return true;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个字符串:");
String str = scanner.next();
if (isPalindrome(str)) {
System.out.println(str + " 是回文字符串");
} else {
System.out.println(str + " 不是回文字符串");
}
}
}
```
程序中,我们定义了一个 `Node` 类表示链表节点,和一个 `Stack` 类表示链栈。在 `isPalindrome` 方法中,我们先将字符串的前一半字符依次入栈,然后如果字符串长度为奇数,将中间的字符弹出(因为中间的字符无论正反读都是一样的);最后再将栈中剩余的字符与字符串的后一半字符一一比较即可。
在主函数中,我们通过 Scanner 类从命令行输入一个字符串,然后调用 `isPalindrome` 方法来判断该字符串是否是回文字符串。
阅读全文