Question:编写一个程序,找到两个单链表相交的起始节点。
confusion:看了很多解释仍然不理解之 相交的点为什么不是1
The answer one: 值相同,不一定是同一个node
The answer two: 不是看数字相同,因为可能两个1是两条链上的1,其节点指针值不同。归根到底是看节点指针值,而不是节点上的数字
自我之错误理解: 在我看到的是 值也相同 指针值也相同呀
like this:
but 想想 answer two的回答,其实他还可以是这样的:
解决思路一:(看到这道题想到的最基本写法)
/**
* 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) {
/**
*思路:1.遍历至节点的最后 判断最后一个节点是否相同 相同即相交
* 2.较长的链表先 走过多余的长度 然后从头节点位置开始比较 相同即返回
* 3,疑惑点:如何比较两个节点是否相同
* 4,疑惑点:成环情况
*/
ListNode pHeadA = headA;
ListNode pHeadB = headB;
int lenA = 0;
int lenB = 0;
if(pHeadA == null || pHeadB == null) return null;
while(pHeadA.next != null){
pHeadA = pHeadA.next;
lenA = lenA+1;
}
while(pHeadB.next != null){
pHeadB = pHeadB.next;
lenB = lenB+1;
}
if(pHeadA.val != pHeadB.val) return null;
int i = 0;
while(i < ((lenB<lenA)?lenA-lenB:lenB-lenA)){
if(lenB < lenA){
headA = headA.next;
i= i+1;
}else{
headB = headB.next;
i= i+1;
}
}
//判断 两个相同长度的链表 每个节点是否相同
while(headA != headB){
headA = (headA == null? null:headA.next);
headB = (headB == null? null:headB.next);
}
return headA;
}
}