比较2个链表的数据! (JAVA)

时间:2014-03-04 09:36:40

标签: java iterator linked-list compare equals

我的项目是查看用户输入的字符串是否是回文。首先,将字符串放入链接列表,然后复制到第二个链接列表中,我完全反转列表以进行比较。

链表是我自己的类以及其中的所有方法。我已经确认链表和反向方法一样工作。

当我遇到问题时,我会尝试比较列表开头的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循环中遍历两个列表但是当我去测试节点的数据时它是不正确的。

如果您需要补充信息或说明,请与我们联系。

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

2 个答案:

答案 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 listrlist指的是new listlist1指的是old list