牛客题霸NC66两个链表的第一个公共节点Java题解
https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?tpId=117&&tqId=34988&rp=1&ru=/ta/job-code-high&qru=/ta/job-code-high/question-ranking
方法:双指针
解题思路:当pHead1==null或pHead2==null时,没有公共节点,返回null。
让node1指向pHead1链表的头节点,node2指向pHead2链表的头节点。然后依次判断每个节点是否相等。当node1到达链表pHead1的末尾时,重新定位到链表pHead2的头节点,当node2到达链表pHead2的末尾时,重新定位到链表pHead1的头节点。这样,当node1和node2相遇时,所指向的节点就是第一个公共节点。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
if(pHead1==null || pHead2==null){
return null;
}
ListNode node1 = pHead1; //node1指向pHead1头节点
ListNode node2 = pHead2; //node2指向pHead2头节点
while(node1!=node2){ //如果node1不等于node2
node1 = node1!=null?node1.next:pHead2; //当node1到达链表pHead1的末尾时,重新定位到链表pHead2的头节点
node2 = node2!=null?node2.next:pHead1; //当node2到达链表pHead2的末尾时,重新定位到链表pHead1的头节点
}
return node1; //当node1和node2相遇时,所指向的节点就是第一个公共节点
}
}
京公网安备 11010502036488号