首页 > 代码库 > 【链表】两个链表的第一个公共结点

【链表】两个链表的第一个公共结点

输入两个链表,找出它们的第一个公共结点。

 

 1 public class Solution { 2      3     /** 4      * 思路:两个链表相交,存在公共的链表尾,根据链表长度的差值,移动指针,找到第一个相同的节点,即为第一个公共节点 5      * @param pHead1 6      * @param pHead2 7      * @return 8      */ 9     public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {10 11         if (pHead1 == null || pHead2 == null) {12             return null;13         }14 15         int d = 0;16 17         ListNode p1 = pHead1;18         ListNode p2 = pHead2;19 20         int length1 = 0;21         while (pHead1 != null) {22             length1++;23             pHead1 = pHead1.next;24         }25 26         int length2 = 0;27         while (pHead2 != null) {28             length2++;29             pHead2 = pHead2.next;30         }31 32         if (length1 > length2) {33             d = length1 - length2;34 35             while (d > 0) {36                 p1 = p1.next;37                 d--;38             }39         } else if (length1 < length2) {40             d = length2 - length1;41 42             while (d > 0) {43                 p2 = p2.next;44                 d--;45             }46         } else {47             return p1;48         }49 50         while (p1 != null) {51             if (p1 == p2) {52                 break;53             }54             p1 = p1.next;55             p2 = p2.next;56         }57         return p1;58     }59 }60 61 class ListNode {62     int val;63     ListNode next = null;64 65     ListNode(int val) {66         this.val = val;67     }68 }

 

【链表】两个链表的第一个公共结点