MENU

LeetCode160.相交链表

August 8, 2018 • Read: 116 • LeetCode

题目链接:LeetCode160

题解

两种做法,第一种,创建一个HashSet,先把A链表的所有节点保存到Set中,然后遍历B链表,将B链表的所有节点保存进去,保存时进行判断,如果Set中已经有这个节点了,就直接return这个节点,否则就加进去

第二种做法,定义两个节点end1,end2,定义两个变量len1,len2,遍历A链表,将end1指到A链表的尾部,然后记录A链表的长度len1,B链表也是如此,然后判断其尾节点是否相同,如果尾节点不相同就直接return null,反之,让len1和len2中较大的那个链表先遍历Math.abs(len1-len2)的长度,然后两个链表再同时遍历,遍历到节点相同时停止,返回该节点

代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode end1 = headA,end2 = headB;
        int len1 = 0,len2 = 0;
        while(end1 != null) {
            end1 = end1.next;
            len1++;
        }
        while(end2 != null) {
            end2 = end2.next;
            len2++;
        }
        if(end1 != end2)
            return null;
        for(int i = 1;i <= Math.abs(len1-len2);i++) {
            if(len1 > len2)
                headA = headA.next;
            else 
                headB = headB.next;
        }
        while(headA != null && headB != null) {
            if(headA == headB)
                return headA;
            headA = headA.next;
            headB = headB.next;
        }
        return null;
    }
}
Archives Tip
QR Code for this page
Tipping QR Code