您的位置:首页 > Web前端

剑指offer37题(两个链表的第一个公共结点)

2017-12-25 14:00 302 查看
题目:输入两个链表,找出它们的第一个公共结点。

思路:首先要明白一点:如果两个单向链表有公共结点,那么这两个链表从某一结点开始,它们的next都指向同一个结点,及公共结点一定出现在链表的            尾部。

           两种思路:

                          第一种是将两个链表的结点放入栈中,我们依次比较栈顶元素,找出公共结点出现的最后一个元素。

                          第二种是将直接遍历两个链表,得到其长度,长度相减得到链表的移动次数,移动之后再比较是否是公共结点。

代码:

/*
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;
}
int count1 = 0;
ListNode p1 = pHead1;
while (p1 != null){
p1 = p1.next;
count1++;
}
int count2 = 0;
ListNode p2 = pHead2;
while (p2 != null){
p2 = p2.next;
count2++;
}
int flag=0;
flag = count1-count2;
if(flag<=0){
while (flag<0){
pHead2 = pHead2.next;
flag++;
}
while(pHead1 != pHead2) {
pHead1 = pHead1.next;
pHead2 = pHead2.next;
}
return pHead1;
}
if(flag>0){
while (flag>0){
pHead1 = pHead1.next;
flag--;
}
while(pHead1 != pHead2){
pHead1 = pHead1.next;
pHead2 = pHead2.next;
}
return pHead1;
}
return null;
}
}


   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: