OJ题-编写一个程序,找到两个单链表相交的起始结点(力扣)

题目:
编写一个程序,找到两个单链表相交的起始节点。
OJ题-编写一个程序,找到两个单链表相交的起始结点(力扣)_第1张图片

思路:一个长链表一个短链表,求出两个链表的长度后确认哪个时longer,哪个是shorter,求出两个链表的长度差diff,先让长链表(longer)走diff步,再比较longer和shorter,如果不相交就各走一步,相交的话就返回longer,即找到了两个链表相交的结点

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    private int getLength(ListNode head) {//求链表长度的函数
        int len = 0;
        for (ListNode c = head; c != null; c = c.next) {
            len++;
        } 
        return len;
    }
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        int lenA = getLength(headA);//获取第一个链表的长度
        int lenB = getLength(headB);//获取第二个链表的长度
        
        ListNode longer = headA;
        ListNode shorter = headB;
        int diff = lenA - lenB;//两个链表的长度差
        if (lenA < lenB) {//判断哪个链表长
            longer = headB;
            shorter = headA;
            diff = lenB - lenA;
        }        
        for (int i = 0; i < diff; i++) {
            longer = longer.next;//走到这一步后长链表和短链表要走的步数相同
        }     
        while (longer != shorter) {//当长链表与短链表不相交时,继续往下走
            longer = longer.next;
            shorter = shorter.next;
        }  
        return longer;//直到长短链表相交,然后返回longer
    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

你可能感兴趣的:(OJ题)