一、题目描述
题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
二、题解
注意题目所说的相交,相交节点不只是数值上的相等,而是相交以后两条链变成一条链。
解决改题目,我们可以:
1、先求出两条链表的长度,然后求出长度的差值len;
2、定义两个节点pl、ps ,让pl节点始终指向较长的那个链表,ps节点始终指向较短的那个链表,并且一开始,两个节点均指向链表的头节点;
3、让指向较长链表的pl节点先走差值len步,然后pl、ps两个节点一起走,直到两个节点相遇,此时分两种情况:
- pl = null,即两个链表不相交,返回null
- pl不为空,则此时pl所指节点正是所求的相交节点
三、代码
public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode pl = headA;ListNode ps = headB;int len1 = 0;int len2 = 0;while(pl != null) {len1++;pl = pl.next;}while(ps != null) {len2++;ps = ps.next;}pl = headA;ps = headB;int len = len1-len2;if(len < 0) {pl = headB;ps = headA;len = len2-len1;}while(len!=0) {pl = pl.next;len--;}while(pl!=ps) {pl = pl.next;ps = ps.next;}if(pl == null) {return null;}return pl;}
}