现在问题是这样的,给你两个单链表,让你比较他们是否相等,比如:
1. 1->2->3_null 和 1->3->null不相等
2. 2->4->5->null 和 2->4->5-null相等
也就是说两个链表的节点个数相同,并且节点所含元素要想到。
其实说实话,如果是让我比较的话,我会先比较两个为空,不为空,或者一个为空一个不为空的情况。然后对于均不为空的情况,会依次比较当一个节点不为空时,另一个链表中节点的情况。哇喔,听起来就有好多if语句要用,估计写出来,对于读者来说,也是一大头痛的事。
然而,同样的问题,高手就会写出很简洁的代码,看完你就会明白,对于编程你还有很大的进步空间:
/*
Compare two linked lists A and B
Return 1 if they are identical and 0 if they are not.
Node is defined as
class Node {
int data;
Node next;
}
*/
int CompareLists(Node headA, Node headB) {
Node p = headA;
Node q = headB;
/*依次比较两个移动节点,直击问题核心,即,对于相等的链表,移动指针p、q不为空且值相等时*/
while(p!=null && q!=null && p.data==q.data ){
p = p.next;
q = q.next;
}
/*跳出循环后,看此时的p、q是否相等。这样同时考虑了两个链表若均为空,怎返回相等,如果是跳出循环p、q仍然相等,等相等。否则就是不相等,可能是因为两个链表长度不等,也可能是因为中间元素不同*/
return p==q?1:0; //三目运算的好处。。。
}