求两个相交链表相交的第一个元素

本文思路参考如下链接:http://blog.csdn.net/guoxudong5288/article/details/7594183

 思路:比较两个链表的长度,计算长度差,令长的链表先遍历长度差个元素;然后两个链表同时遍历,并比较元素,如果相等返回相等元素

 

class Node{
     int data;
      Node next;
  
      Node(int data,Node next){
           this.data = data;
           this.next = next;
       }
 }
 Node head1 ; //链表1
 Node head2;  //链表2
 
    ......建立两个相交链表
   
    /**
     * 比较两个链表的长度,计算长度差,让长的链表先遍历长度差个元素,然后两个链表同时遍历
     * 同时比较链两个元素是否相等,相等则返回
     * @param head1
     * @param head2
     * @return
     */
 private Node getIntersection(Node head1,Node head2){
       int len1 = getLength(head1);
       int len2 = getLength(head2);
       int diffLen;
       Node p1 = head1;
       Node p2 = head2;
     
      if(len1 < len2){
              diffLen = len2-len1;
      
             while(diffLen-- > 0){
                   p2 = p2.next;
             }
     }
      else{
            diffLen = len1 - len2;
      
            while(diffLen-- > 0)
                  p1 = p1.next;
        }


      while(p1 != p2){
               p1 = p1.next;
               p2 = p2.next;
       }
       return p1;
    }
   
    /**
     * 返回链表的长度
     * @param head
     * @return
     */
    private int getLength(Node head){
       int len=0;
       Node p = head;
     
      while(p != null){
           len++;
           p = p.next;
      }
     
     return len;
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值