1.题目描述
2.题解
简单来说,就是用指针找到两个链表中地址值一样的节点。
而查找的方法就是先将分别在两个链表上的指针到互相对齐的位置,然后向后遍历直到找到地址值一样的节点即可。
3.代码示例
/**
* 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 a=new ListNode(0);
ListNode b=new ListNode(0);
int lenA=getLength(headA);
int lenB=getLength(headB);
//长度差,取绝对值
int location=(lenA-lenB>0?lenA-lenB:lenB-lenA);
a=headA;
b=headB;
//将长度较长的链表上的指针指到和另一个指针同样的位置
if(lenA>lenB){
for(int i=0;i<location;i++){
a=a.next;
}
}
if(lenA<lenB){
for(int i=0;i<location;i++){
b=b.next;
}
}
//接下来就是不断向后遍历直到两个指针相等
while(a!=null){
if(a==b){
return a;
}
a=a.next;
b=b.next;
}
return a;
}
//定义的一个求链表长度的方法
public int getLength(ListNode head){
ListNode index=head;
int length=0;
while(index!=null){
length++;
index=index.next;
}
return length;
}
}
4.问题总结
i.题目理解的偏差:
题目中所给的两个链表本身就是想交的,最后要查找的不是存储的值相同的节点而是地址值相同的节点。
还可以通过这个例子来说明:
例子中所给的两个链表本身就是在8那个位置相交的,因此结果也只能是8而不是1。