2014-03-04 69 views
-1

我的项目是查看用户输入的字符串是否是回文。首先,将字符串放入链接列表中,然后将其复制到第二个链接列表中,在此完全颠倒列表以便比较它们。比较2个链表的数据! (Java)

链表是我自己的类以及其中的所有方法。我已确认链接列表的工作方式与反向方法相同。

我遇到问题的时候,当我尝试并从列表的开头比较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循环迭代,但是当我去考节点的数据是不正确。

如果您需要补充信息或澄清,请让我知道。

我的问题是我如何修复我的代码,以便我能够按顺序比较列表以查看输入的字符串是否是回文或不?

+3

决不会比较的对象''==如果你想比较平等 - ''==比较对象的身份! – Smutje

+0

您不必在'[]'中放置'\\ W'。 – Pshemo

回答

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"); 

    } 
+0

我最终做的是让自己的get方法,它完美的工作!谢谢! – Dreaded

0
rlist = list1; 

是问题所在。 rlist和list1都只是对同一个List的两个引用。

rlist = new LinkedList<Character>(list1); 

这种替代它会创建new List和复制所有的list1new list的元素。 rlist指的是new list,而list1指的是old list