【问题标题】:Comparing the data of 2 linked lists! (Java)比较2个链表的数据! (爪哇)
【发布时间】:2014-03-04 09:36:40
【问题描述】:

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

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

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

如果您需要补充信息或澄清,请告诉我。

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

【问题讨论】:

  • 如果您想比较相等性,切勿将对象与 == 比较 - == 比较对象身份!
  • 您不必将\\W 放在[] 中。

标签: java iterator linked-list compare equals


【解决方案1】:

这可以通过以下方式实现:

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

     }

【讨论】:

  • 我最终做的是制作自己的 get 方法,它完美地工作!谢谢!
【解决方案2】:
rlist = list1;

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

替换为

rlist = new LinkedList<Character>(list1);

这将创建new List 并将list1 中的所有元素复制到new listrlist 指的是new list,而list1 指的是old list

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    相关资源
    最近更新 更多