我是编程新手。
我知道有比我更好更好的方法来比较两个链表。但是,因为我是新手,我想修复我的代码并了解我犯错误的地方。
我要做的是循环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;
}
答案 0 :(得分:3)
以下是代码的清理版本。你的总体想法很好,但你确实增加了一些并发症。
tmpA.next
为NULL时你还没有比较A和B的当前数据 - 所以你需要在循环后做最后一次检查。这是一个清洁版本:
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);
}