题解 | #两个链表的第一个公共结点#

两个链表的第一个公共结点

https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46

import java.util.*;
/*
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 one_listNode = ListNodeLenth(pHead1);//5
        int two_listNode = ListNodeLenth(pHead2);//4

//        差值

//大于0 说明第一个链表长,让第一个链表先走差值步.
//否则 让第二个链表先走差值步.

        ListNode max_index = null;
        ListNode min_index = null;

        if (one_listNode > two_listNode) {
            max_index = pHead1;
            min_index = pHead2;
        } else {
            max_index = pHead2;
            min_index = pHead1;
        }

        for (int i = 0; i < Math.abs(one_listNode -two_listNode); i++) {
            max_index = max_index.next;
        }
        while (max_index != min_index) {
            max_index = max_index.next;
            min_index = min_index.next;
        }
        return max_index;
    }

    public int ListNodeLenth(ListNode pHead) {
         if (pHead == null) {
            return 0;
        }
        ListNode temp = pHead;
        int len = 1;
        while (temp.next != null) {
            len++;temp = temp.next;
        }
        return len;
    }
}

  1. 得出长度,之后得出差值。然长的链表先走插值。
  2. 之后在一起走,就可以找出公共节点。
全部评论

相关推荐

怎么起名字:早知道就不读书了,害得我送外卖还得扶眼镜
点赞 评论 收藏
分享
仁者伍敌:难怪小公司那么挑剔,让你们这些大佬把位置拿了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务