zoukankan      html  css  js  c++  java
  • 剑指:两个链表的第一个公共结点

    题目描述

    输入两个链表,找出它们的第一个公共结点。

    样例

    给出两个链表如下所示:
    A:        a1 → a2
                       ↘
                         c1 → c2 → c3
                       ↗            
    B:     b1 → b2 → b3
    输出第一个公共节点c1



    解法

    先遍历两链表,求出两链表的长度,再求长度差 |n1 - n2|

    较长的链表先走 |n1 - n2| 步,之后两链表再同时走,首次相遇时的节点即为两链表的第一个公共节点。

     
    /*
    public class ListNode {
        int val;
        ListNode next = null;
    
        ListNode(int val) {
            this.val = val;
        }
    }*/
    public class Solution {
        public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
            if(pHead1==null || pHead2==null){
                return null;
            }
            
            int l1 = getLen(pHead1);
            int l2 = getLen(pHead2);
            
            ListNode p1 = pHead1;
            ListNode p2 = pHead2;
            
            if(l1>l2){
                for(int i=0; i<l1-l2; i++){
                    p1 = p1.next;
                }
            }else if(l1<l2){
                for(int i=0; i<l2-l1; i++){
                    p2 = p2.next;
                }
            }
            
            while(p1!=p2 && p1!=null && p2!=null){
                p1 = p1.next;
                p2 = p2.next;
            }
            
            return (p1==null||p2==null)?null:p1;
        }
        
        private int getLen(ListNode head) {
            int n = 0;
            ListNode cur = head;
            while (cur != null) {
                ++n;
                cur = cur.next;
            }
            return n;
        }
    }
    
    
    
     
  • 相关阅读:
    序列化 Serialization
    http soap关系
    sql 查询
    返回最后插入到标识列的值(scope_identity.ident_current.@@identity)
    匿名方法
    九、volatile与Java内存模型
    八、Java内存模型JMM
    十、CAS
    CUSTOM ROUTE CONSTRAINTS
    获取本地数据库
  • 原文地址:https://www.cnblogs.com/lisen10/p/11572848.html
Copyright © 2011-2022 走看看