剑指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. April 20 2017 Week 16 Thursday

    We are all in the gutter, but some of us are looking at the stars. 我们都生活在阴沟里,但仍有人仰望星空. In the past m ...

  2. ajax(form)图片上传(spring)

    第一步:spring-web.xml <!--配置上传下载--> <bean id="multipartResolver" class="org.spr ...

  3. MyBatis简单了解

    MyBatis 是什么? MyBatis 是一个简化和实现了 Java 数据持久化层(persistence layer)的开源框架,它抽象了大量的 JDBC 冗余代 码,并提供了一个简单易用的 AP ...

  4. putty乱码问题

    1.将linux系统编码设置为utf-8 #vi /etc/sysconfig/i18n #设置为如下内容: LANG="en_US.UTF-8" SYSFONT="la ...

  5. C#继承的多态性

    C#继承的多态性 当一个类A派生出新类B时,这个基类A在新类B中可以表现为不同的类型:用作它自己的类型.基类型,或者在实现接口时用作接口类型,我们将这种情况称为多态性. C#中的每种类型都是多态性的, ...

  6. REST Adapter实现SAP PI中的增强XML/JSON格式转换(转载)

    SAP标准的REST adapter有着XML/JSON转换的功能,它很有用,因为一方面SAP PI/PO内部以XML格式处理数据,而另一方面,在处理REST架构风格的时候,JSON才是事实上的格式. ...

  7. 爬虫学习(十二)——bs4实践案例

    实践项目————诗词名句网<三国演义>小说爬取 import osimport reimport timeimport urllib.requestimport urllib.parsef ...

  8. zabbix运维监控平台

    zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管理员快速定位/解决 ...

  9. ethereum(以太坊)(十二)--应用(二)__投票(基础总和)

    编写应用合约之前,先弄清它的逻辑,有助于我们更好的部署合约 pragma solidity ^0.4.21; pragma experimental ABIEncoderV2; contract vo ...

  10. ethereum(以太坊)(六)--整型(int)

    pragma solidity ^0.4.20; /* uint8 uint16 ...uint256 int8 int16 int24 ..int256 uint => uint256 int ...