链表相交

https://leetcode-cn.com/problems/intersection-of-two-linked-lists/
在这里插入图片描述

编写一个程序,找到两个单链表相交的起始节点。

import tree.ListNode;

/**
 * @Description: 两条链表,查找相交的点 
 *               解法:cha = 长链条长度-短链条长度, 长链条前进到cha个节点,同步向前,当节点相同就是相交节点  
 * @Author: Jaryn
 * @Date: 2019/11/14 15:11
 */
public class ListSameNode {


    public static ListNode getSame(ListNode node1,ListNode node2) {
        int len1 = len(node1);
        int len2 = len(node2);
        int cha = Math.abs(len1 - len2);
        if(len1 > len2) {
            for(int i=0; i<cha; i++) {
                node1 = node1.getNext();
            }
        }else {
            for(int i=0; i<cha; i++) {
                node2 = node2.getNext();
            }
        }
        while(node1.getNext() != null) {
            node1 = node1.getNext();
            node2 = node2.getNext();
            if(node1 == node2) {
                return node1;
            }
        }
        return null;
    }

    public static int len(ListNode node) {
        int i = 1;
        ListNode fnode = node;
        while((fnode = fnode.getNext()) != null) {
            i++;
        }
        return i;
    }

    public static void main(String[] args) {
        ListNode node6 = new ListNode(6,null);
        ListNode node5 = new ListNode(5,node6);
        ListNode node4 = new ListNode(4,node5);
        ListNode node3 = new ListNode(3,node4);
        ListNode node2 = new ListNode(2,node3);
        ListNode node1 = new ListNode(1,node2);

        ListNode node7 = new ListNode(7,node4);

        System.out.println(getSame(node1, node7).getVal());
    }
}


版权声明:本文为jaryn_fang原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。