public class Solution{
public ListNode getIntersectionNode(ListNode headA, ListNode headB){
if(headA == null || headB == null) return null;
ListNode pA = headA, pB = headB;
while(pA != pB){
pA = pA == null ? headB : pA.next;
pB = pB == null ? headA : pB.next;
}
return pA;
}
}
总体思想:就是A走一遍链表A,再走一遍链表B
B走一遍链表B,再走一遍链表A
如果有相交部分,那么最后pA=pB
如果没有相交部分,呢么最后pA=pB=null
但是我有一个小问题:如果两个长度相等的链表,都在同样的位置数值相等,但是之后不相等,那么是否这个题目也会通过?
例如:1234和6739
不会通过
自己写的代码
思路:先计算两个链表长度,再从相等长度处开始逐一比对
/**
* 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) {
int lA = getLength(headA);
int lB = getLength(headB);
ListNode p = headA;
ListNode q = headB;
int delta = lA - lB;
if(lA > lB){
while(delta > 0){
p = p.next;
delta--;
}
}
else{
while(delta < 0){
q = q.next;
delta ++;
}
}
while(p != q){
p = p.next;
q = q.next;
}
return p;
}
public int getLength(ListNode head){
if(head == null) return 0;
int l = 1;
ListNode p = new ListNode();
p = head;
while(p.next != null){
p = p.next;
l++;
}
return l;
}
}