输入两个链表,找出它们的第一个公共结点。
首先要明白一点,两条链表相交,则他们的形状类似Y,而不是X。所以,从相交的点以后,两条链表的所有结点都是一样的。我们只要找出第一个相同的结点即可。 1.我们分别算出两条链表的长度 2.算出两条链表的长度差,并除去长的链表前面多余的结点 3.同时遍历,找出第一个相同的结点
public class Solution14 { public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { int l1=0,l2=0; ListNode n1,n2; n1=pHead1; n2=pHead2; //求两条链表的长度 while(n1!=null){ l1++; n1=n1.next; } while(n2!=null){ l2++; n2=n2.next; } //让两条链表一样长,在比较第一个一样的 if(l1>l2){ int temp=l1-l2; while(temp-->0){ pHead1=pHead1.next; } }else{ int temp=l2-l1; while(temp-->0){ pHead2=pHead2.next; } } while(pHead1!=null&&pHead2!=null){ if(pHead1.val==pHead2.val) return pHead1; pHead1=pHead1.next; pHead2=pHead2.next; } return null; } public static void main(String[] args) { int[] a = { 4, 5, 1, 6, 2, 7, 3, 8 }; Solution14 b = new Solution14(); // System.out.PRintln(b.GetLeastNumbers_Solution(a,10)); }}新闻热点
疑难解答