比较两个单链表是否相等——高手教你少用if,写出简洁代码

现在问题是这样的,给你两个单链表,让你比较他们是否相等,比如:
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; //三目运算的好处。。。
}
  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值