题目:leetcode 面试题 02.07. 链表相交
描述:
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。
图示两个链表在节点 c1 开始相交:
思路:
简单来说,就是求两个链表交点节点的指针。 这里要注意,交点不是数值相等,而是指针相等。
为了方便举例,假设节点元素数值相等,则节点指针相等。
看如下两个链表,目前curA指向链表A的头结点,curB指向链表B的头结点:
class ListNode {public int val;public ListNode next;public ListNode(){};public ListNode(int val){ this.val=val;}public ListNode(int val, ListNode next) {this.val = val;this.next = next;}
}public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode curA=headA;ListNode curB=headB;int lenA=0,lenB=0;while(curA!=null){lenA++;curA=curA.next;}while(curB!=null){lenB++;curB=curB.next;}curA=headA;curB=headB;int len=Math.abs(lenA-lenB);if(lenA>=lenB){for (int i = 0; i < len; i++)curA=curA.next;}else {for (int i = 0; i < len; i++) curB=curB.next; }while(curA!=null){if(curA==curB)return curA;curA=curA.next;curB=curB.next;}return null;}
}