标签:
题目描述输入两个链表,找出它们的第一个公共结点。
思路分析:将其中一个链表结点,存进HashMap中,将利用ContainsKey()进行判断是否有公共结点
代码1:
<span style="color:#6600cc;">import java.util.*; public class Solution { public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { ListNode p=pHead1; ListNode q=pHead2; HashMap<ListNode,Integer> map=new HashMap<ListNode,Integer>(); while(p!=null){ map.put(p,null); p=p.next; } while(q!=null){ if(map.containsKey(q)){ return q; }else{ q=q.next; } } return null; } }</span>代码2:
<span style="color:#cc33cc;">public class Solution { public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { ListNode current1 = pHead1;// 链表1 ListNode current2 = pHead2;// 链表2 if (pHead1 == null || pHead2 == null) return null; int length1 = getLength(current1); int length2 = getLength(current2); // 两连表的长度差 // 如果链表1的长度大于链表2的长度 if (length1 >= length2) { int len = length1 - length2; // 先遍历链表1,遍历的长度就是两链表的长度差 while (len > 0) { current1 = current1.next; len--; } } // 如果链表2的长度大于链表1的长度 else if (length1 < length2) { int len = length2 - length1; // 先遍历链表1,遍历的长度就是两链表的长度差 while (len > 0) { current2 = current2.next; len--; } } //开始齐头并进,直到找到第一个公共结点 while(current1!=current2){ current1=current1.next; current2=current2.next; } return current1; } // 求指定链表的长度 public static int getLength(ListNode pHead) { int length = 0; ListNode current = pHead; while (current != null) { length++; current = current.next; } return length; } }</span>
标签:
原文地址:http://blog.csdn.net/baidu_21578557/article/details/51615207