牛客题霸NC66两个链表的第一个公共节点Java题解
方法:双指针
解题思路:当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相遇时,所指向的节点就是第一个公共节点 } }