剑指Offer - 九度1505 - 两个链表的第一个公共结点
2013-11-24 20:09
题目描述:

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

输入:

输入可能包含多个测试样例。
对于每个测试案例,输入的第一行为两个整数m和n(1<=m,n<=1000):代表将要输入的两个链表的元素的个数。
接下来的两行,第一行为第一个链表的所有元素,中间用空格隔开。第二行为第二个链表的所有元素,中间用空格隔开。

输出:

对应每个测试案例,
输出两个链表的第一个公共结点的值。
如果两个链表没有公共结点,则输出“My God”。

样例输入:
5 4
1 2 3 6 7
4 5 6 7
3 3
1 5 7
2 4 7
2 3
1 3
4 5 6
样例输出:
6
7
My God
题意分析:
  给定两条链表,如果有公共节点的话,请找出,否则打印“My God”。这题本身出的有问题,如果两条单链表有一个公共节点的话,那应该指的是共用同一个节点,即指向同一个内存地址。如果两链表相交于一点,那么之后的部分都完全一样了。这题由于输入的数据是两组单独的数据,因此构造出来的两条链表在内存的范畴上肯定是不相交的。只能判断两者尾巴上的数据是否一致。
  下面是思路:对于长度为m,n的两条链表,如果相交于某一点,那么之后的所有数据都必须一一相等。因此定义指针p1、p2指向链表1和2的表头,先将较长链表的指针移动到与短链表对齐的位置。然后逐个检查两两节点是否相等。如果当前节点相等,则表示此节点可能是“第一个公共节点”,然后从此节点往后移动逐个检查后面的节点是否全部对应相等。如果全部相等,则此节点就是公共节点,否则不相等的节点往后一个开始继续找答案。
  这题的问题在于俩链表的公共节点应该是内存地址相同,而不是值相等。否则也就不好定义“公共”了。
 // 654279    zhuli19901106    1505    Accepted    点击此处查看所有case的执行结果    1024KB    2044B    70MS
//
#include <cstdio>
using namespace std; struct ListNode{
int val;
struct ListNode *next;
ListNode(int _val = ): val(_val), next(NULL){}
}; void delete_list(ListNode *head)
{
if(head == NULL){
return;
} ListNode *ptr; while(head != NULL){
ptr = head;
head = head->next;
delete ptr;
}
} int main()
{
ListNode *h1, *h2, *p1, *p2, *cp1, *cp2;
int m, n;
int tmp;
int i; while(scanf("%d%d", &m, &n) == ){
h1 = h2 = NULL;
p1 = p2 = NULL;
for(i = ; i < m; ++i){
scanf("%d", &tmp);
if(p1 == NULL){
h1 = new ListNode(tmp);
p1 = h1;
}else{
p1->next = new ListNode(tmp);
p1 = p1->next;
}
}
for(i = ; i < n; ++i){
scanf("%d", &tmp);
if(p2 == NULL){
h2 = new ListNode(tmp);
p2 = h2;
}else{
p2->next = new ListNode(tmp);
p2 = p2->next;
}
} if(h1 == NULL || h2 == NULL){
printf("My God\n");
}else{
p1 = h1;
p2 = h2;
if(m < n){
for(i = ; i < n - m; ++i){
p2 = p2->next;
}
}else{
for(i = ; i < m - n; ++i){
p1 = p1->next;
}
} while(p1 != NULL && p2 != NULL && p1->val != p2->val){
p1 = p1->next;
p2 = p2->next;
}
/*
cp1 = p1;
cp2 = p2;
while(cp1 != NULL && cp2 != NULL){
if(cp1->val != cp2->val){
break;
}else{
cp1 = cp1->next;
cp2 = cp2->next;
}
}
if(cp1 != NULL && cp2 != NULL){
// mismatch found here, move forward
p1 = cp1->next;
p2 = cp2->next;
}else{
break;
}
*/ if(p1 != NULL && p2 != NULL && p1->val == p2->val){
printf("%d\n", p1->val);
}else{
printf("My God\n");
}
} delete_list(h1);
h1 = NULL;
delete_list(h2);
h2 = NULL;
} return ;
}

剑指Offer - 九度1505 - 两个链表的第一个公共结点的更多相关文章

  1. 【剑指Offer】36、两个链表的第一个公共结点

      题目描述:   输入两个链表,找出它们的第一个公共结点.   解题思路:   本题首先可以很直观的想到蛮力法,即对链表1(假设长度为m)的每一个结点,遍历链表2(假设长度为n),找有没有与其相同的 ...

  2. 剑指offer 面试题52. 两个链表的第一个公共节点

    这题之前leetcode做过,权当复习 首先这题没说是否一定有公共节点,如果代码可能因为这一点造成死循环的,需要提前验证所给两个链表是否有公共节点. 方法1:对于每一个list1的节点,遍历list2 ...

  3. 九度OJ 1505 两个链表的第一个公共结点 【数据结构】

    题目地址:http://ac.jobdu.com/problem.php?pid=1505 题目描述: 输入两个链表,找出它们的第一个公共结点. 输入: 输入可能包含多个测试样例. 对于每个测试案例, ...

  4. 【Offer】[52] 【两个链表的第一个公共结点】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 输入两个链表,找出它们的第一个公共结点.下图中6为公共结点:  牛客网刷题地址 思路分析 如果两个链表有公共节点,那么公共节点出现在两 ...

  5. C++版 - 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告

    剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?t ...

  6. 【剑指Offer面试编程题】题目1505:两个链表的第一个公共结点--九度OJ

    题目描述: 输入两个链表,找出它们的第一个公共结点. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入的第一行为两个整数m和n(1<=m,n<=1000):代表将要输入的两个链表 ...

  7. 剑指Offer - 九度1509 - 树中两个结点的最低公共祖先

    剑指Offer - 九度1509 - 树中两个结点的最低公共祖先2014-02-07 01:04 题目描述: 给定一棵树,同时给出树中的两个结点,求它们的最低公共祖先. 输入: 输入可能包含多个测试样 ...

  8. 剑指Offer - 九度1352 - 和为S的两个数字

    剑指Offer - 九度1352 - 和为S的两个数字2014-02-05 18:15 题目描述: 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于 ...

  9. 剑指Offer - 九度1519 - 合并两个排序的链表

    剑指Offer - 九度1519 - 合并两个排序的链表2013-11-30 22:04 题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则.(hi ...

随机推荐

  1. Jmeter入门7 测试中使用到的几个定时器和逻辑控制器

    1 测试中提交数据有延时1min,所以查询数据是否提交成功要设置定时器. 固定定时器页面:单位是毫秒 [dinghanhua] 2 集合点.Synchronizing Timer 集合点编辑:集合用户 ...

  2. C++学习之继承中的成员访问控制

    由基类到派生类的过程中,在派生类里如何访问基类成员,以及派生类对象如何访问基类成员,是根据派生类在从基类派生时是以什么方式进行的派生:public.protect或者private.下面说一下在这三种 ...

  3. SIP MGCP和H323的区别

    在Windows中内置的NetMeeting就是典型的H.323协议客户端,而比较常见的SIP系统是微软开发的MSN Messenger系统.首先,由用户A向SIP服务器发出呼叫请求,请求的信息包含自 ...

  4. 种类并查集,Poj(1703)

    题目链接:http://poj.org/problem?id=1703 第一次做种类并查集,有的地方还不是很清楚,想了一上午,有点明白了,这里记录一下. 这里我参考的红黑联盟的题解. 关键:种类并查集 ...

  5. linq 和 lmabda 表达式 的用法 和优劣 转自 农码一生

    https://www.cnblogs.com/zhaopei/p/5746414.html

  6. multi-view datasets

    http://rll.berkeley.edu/2014_ICRA_dataset/ http://rgbd-dataset.cs.washington.edu/dataset/

  7. C#获取包括一二级汉字的拼音 首字母

    C#获取包括一二级汉字的拼音 首字母 声母 汉字拼音转换 using System; using System.Collections.Generic; using System.Linq; usin ...

  8. Subversion简介

    作为一名编程人员,SVN经常作为代码.项目的版本控制,殊不知SVN也可作为其他领域的版本控制,例如对文档.音频.视频等 . SVN可以看成一种文件系统,为了使工作人员提高工作效率,可以进行并行的工作, ...

  9. WebAppBuilder独立于Portal之arcgis for js应用框架研究

    1.前言 最近在做项目过程中,用到了WAB,先做一下总结和归类.Webappbuilder(简称WAB)是运行在portal或者online的一款webGIS开发应用程序,其代码开源并且具有优秀的设计 ...

  10. poj_3641_Pseudoprime numbers

    Fermat's theorem states that for any prime number p and for any integer a > 1, ap = a (mod p). Th ...