我的项目是查看用户输入的字符串是否是回文。首先,将字符串放入链接列表,然后复制到第二个链接列表中,我完全反转列表以进行比较。
链表是我自己的类以及其中的所有方法。我已经确认链表和反向方法一样工作。
当我遇到问题时,我会尝试比较列表开头的2。 这就是我尝试过的:
package palindromes;
import data_structures.*;
import java.util.Iterator;
public class Palindrome
{
public boolean isPalindrome(String s)
{
if (s.length() <= 1) // base case
return true;
String originalList = s.replaceAll("[\\W]", "").toLowerCase();
LinkedList<Character> list1 = new LinkedList<Character>();
LinkedList<Character> rlist = new LinkedList<Character>();
for (int i = 0; i < originalList.length(); i++)
{
list1.addLast(originalList.charAt(i));
}
rlist = list1;
rlist.reverse();
Iterator<Character> l1 = list1.iterator();
Iterator<Character> l2 = rlist.iterator();
while (l1.hasNext() && l2.hasNext())
{
if (l1.next() != l1.next())
return false;
}
return true;
}
}
我尝试在while循环中遍历两个列表但是当我去测试节点的数据时它是不正确的。
如果您需要补充信息或说明,请与我们联系。
我的问题是我如何修复我的代码,以便我能够按顺序比较列表以查看输入的字符串是否是回文?
答案 0 :(得分:2)
这可以通过以下方式实现:
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add("c");
list.add("b");
list.add("a");
int size = list.size();
for(int i = 0; i<size/2; i++)
{
if(list.get(i) == list.get(size - 1))
System.out.println("list is palindrome");
}
答案 1 :(得分:0)
rlist = list1;
是问题所在。 rlist和list1都只是对同一个List的两个引用。
替换为
rlist = new LinkedList<Character>(list1);
这将创建new List
并将list1
中的所有元素复制到new list
。 rlist
指的是new list
而list1
指的是old list
。