确定两个单链表是否相同?

时间:2017-04-21 22:50:53

标签: java data-structures linked-list match

我想确定两个单链表是否相同。 如果它们相同,则程序应打印匹配的字母。

实施例: 杂音和鞑靼是相同的,因为它们都具有相同的模式" abcabc"。

AAABBCbbaaa和11122322111是相同的

匹配的字母: A↔1 B↔2 C↔3

我必须只使用单个链表。

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.print("Please enter a string:");
    String linked1=scanner.nextLine();
    System.out.println();
    System.out.print("Please enter another string:");
    String linked2=scanner.nextLine();

    SingleLinkedList SLL1 = new SingleLinkedList();
    SingleLinkedList SLL2 = new SingleLinkedList();


    for (int i = 0; i < linked1.length(); i++) {
        char  a=linked1.charAt(i);
        a = Character.toLowerCase(a);
        SLL1.addToEnd(a);
    }
    for (int i = 0; i < linked2.length(); i++) {
        char  a=linked2.charAt(i);
        a = Character.toLowerCase(a);
        SLL2.addToEnd(a);
    }


public class SingleLinkedList{

private Node head;

public SingleLinkedList()
{
    head = null;
}

public boolean isEmpty(){
    return head == null;
}
public void addToEnd(Object dataToAdd)
{
    Node newNode = new Node(dataToAdd);

    if(head == null)
    {
        head = newNode;
    }
    else
    {
        Node temp = head;

        while(temp.getLink() != null)
        {
           temp = temp.getLink();
        }

        temp.setLink(newNode);
    }
}
public String display()
{
    String output = "";

    Node temp = head;

    while(temp != null)
    {
       output += temp.getData() + " ";
       temp = temp.getLink();
    }

    return output;
}

}

1 个答案:

答案 0 :(得分:0)

你可以做到,但这是一项繁琐的工作,我没有力气写出实际的代码。

你应该编码(而不是加密)你的序列。

对列表进行编码的一种简单方法是迭代它的值,您选择的每个值都必须根据已经遇到的值进行检查。

如果检查序列中没有该值,则添加该值并继续。

在此结束时,您将获得一系列在找到它们时排序的唯一值。

然后,对于seq的每个元素,您可以找到支票集中的位置,并构建这些位置的新seq。

您对两个序列重复此操作,然后您可以匹配编码序列。

您应该为seq创建一个indexOf方法来简化程序。