比较两个链表

时间:2018-04-20 13:04:00

标签: java algorithm data-structures

我是编程新手。

我知道有比我更好更好的方法来比较两个链表。但是,因为我是新手,我想修复我的代码并了解我犯错误的地方。

我要做的是循环both of the linkedlist并同时比较每个节点。

比较两个链接列表A和B =>如果它们相同则返回1,如果不相同则返回0。

我会提前真的感谢你的帮助。

int CompareLists(Node headA, Node headB) {

    int i = 0;
    int j = 0;


    Node tmpA = headA;
    Node tmpB = headB;

    if(tmpB.next != null && tmpA.next == null) return 0;

    while(tmpA.next != null) {

        if(tmpB.next == null) return 0;

        while(tmpB.next != null) {

            if (i == j) {

                if (tmpA.data != tmpB.data) return 0;

            } else {
                break;
            }
            tmpB = tmpB.next;

            j++;



        }   

        i++;

        tmpA = tmpA.next;

    }

    if(tmpA.data != tmpB.data) return 0;
    else return 1;

}

2 个答案:

答案 0 :(得分:3)

以下是代码的清理版本。你的总体想法很好,但你确实增加了一些并发症。

  1. 这两个索引是不必要的,因为你总是保持你的列表对齐(当B前进时,如果一切正常你就会中断,然后A也会前进)。这让我想到:
  2. 您不需要内部while和break,只需要检查当前节点
  3. 你忘记了一件事 - 当tmpA.next为NULL时你还没有比较A和B的当前数据 - 所以你需要在循环后做最后一次检查。
  4. 这是一个清洁版本:

    int CompareLists(Node headA, Node headB) {    
        Node tmpA = headA;
        Node tmpB = headB;
    
        if(tmpB.next != null && tmpA.next == null) return 0;
    
        while(tmpA.next != null) {    
            if(tmpB.next == null || tmpA.data != tmpB.data) return 0;
    
            tmpB = tmpB.next;
            tmpA = tmpA.next;  
        }
    
        //Added:
        if(tmpB.next != null || tmpA.data != tmpB.data)  return 0;
        return 1;
    }
    

    当然,您无需一直处理next。您可以只测试tmpA/tmpB == null等,以节省更多空间 - 我会留待您考虑。

    正如@vatbub在评论中指出的那样,最后的挑选是尝试并使用最合适的类型 - 返回布尔值就是你真正想要的。

答案 1 :(得分:3)

通过练习变得更好

int CompareLists(Node a, Node b) {
    while(a!=null && b!=null && a.data == b.data) {
        a=a.next;
        b=b.next;
    }
    return (a==null && b==null ? 1: 0);
}