剑指Offer - 九度1505 - 两个链表的第一个公共结点
剑指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 - 两个链表的第一个公共结点的更多相关文章
- 【剑指Offer】36、两个链表的第一个公共结点
题目描述: 输入两个链表,找出它们的第一个公共结点. 解题思路: 本题首先可以很直观的想到蛮力法,即对链表1(假设长度为m)的每一个结点,遍历链表2(假设长度为n),找有没有与其相同的 ...
- 剑指offer 面试题52. 两个链表的第一个公共节点
这题之前leetcode做过,权当复习 首先这题没说是否一定有公共节点,如果代码可能因为这一点造成死循环的,需要提前验证所给两个链表是否有公共节点. 方法1:对于每一个list1的节点,遍历list2 ...
- 九度OJ 1505 两个链表的第一个公共结点 【数据结构】
题目地址:http://ac.jobdu.com/problem.php?pid=1505 题目描述: 输入两个链表,找出它们的第一个公共结点. 输入: 输入可能包含多个测试样例. 对于每个测试案例, ...
- 【Offer】[52] 【两个链表的第一个公共结点】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 输入两个链表,找出它们的第一个公共结点.下图中6为公共结点:  牛客网刷题地址 思路分析 如果两个链表有公共节点,那么公共节点出现在两 ...
- C++版 - 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告
剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?t ...
- 【剑指Offer面试编程题】题目1505:两个链表的第一个公共结点--九度OJ
题目描述: 输入两个链表,找出它们的第一个公共结点. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入的第一行为两个整数m和n(1<=m,n<=1000):代表将要输入的两个链表 ...
- 剑指Offer - 九度1509 - 树中两个结点的最低公共祖先
剑指Offer - 九度1509 - 树中两个结点的最低公共祖先2014-02-07 01:04 题目描述: 给定一棵树,同时给出树中的两个结点,求它们的最低公共祖先. 输入: 输入可能包含多个测试样 ...
- 剑指Offer - 九度1352 - 和为S的两个数字
剑指Offer - 九度1352 - 和为S的两个数字2014-02-05 18:15 题目描述: 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于 ...
- 剑指Offer - 九度1519 - 合并两个排序的链表
剑指Offer - 九度1519 - 合并两个排序的链表2013-11-30 22:04 题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则.(hi ...
随机推荐
- Recent plan + Summary (two weeks)
Plan: Homework: B365 (next week) B392, B335 Interview: Friday, do the assignment Thursday Summary: I ...
- centos下yum安装mysql5.6后,无法启动 MySQL Daemon failed to start
如果是全新安装应该就不会出现这个问题,升级安装的话,要运行 mysql_upgrade ,但是启动MYSQL就报错MySQL Daemon failed to start 如此就没办法运行mysql_ ...
- 2018.7.18 div,section,article的区别和使用
section ·<section> 标签定义文档中的节(section.区段).比如章节.页眉.页脚或文档中的其他部分. ·section用作一段有专题性的内容,一般在它里面会带有标题. ...
- C#继承的多态性
C#继承的多态性 当一个类A派生出新类B时,这个基类A在新类B中可以表现为不同的类型:用作它自己的类型.基类型,或者在实现接口时用作接口类型,我们将这种情况称为多态性. C#中的每种类型都是多态性的, ...
- caffe中各种cblas的函数使用总结
转来的,来自:http://www.cnblogs.com/huashiyiqike/p/3886670.html 总结的很赞,转到这里,留一下笔记.感觉cblas的函数名字很好记的,试着去找过源代码 ...
- Filter,一种aop编程思想的体现
一.filter简介 filter是Servlet规范里的一个高级特性,只用于对request.response的进行修改. filter提出了FilterChain的概念,客户端请求request在 ...
- orale 10g和11g中的自动统计任务
orale 10g和11g中的自动统计任务 博客分类: 数据库相关/oracle 1) 先来看下oracle 10g中的自动统计任务的问题. 从Oracle Database 10g开始,Or ...
- Spring整合JUnit spring静态对象属性的注入
package cn.itcast.d_junit4; import org.junit.Test; import org.junit.runner.RunWith; import org.sprin ...
- JQuery 解决按钮上的倒计时问题
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- react事件绑定的三种常见方式以及解决Cannot update during an existing state transition (such as within `render`). Render methods should be a pure function of props and state问题思路
在 React 组件中,每个方法的上下文都会指向该组件的实例,即自动绑定 this 为当前组件. 而且 React 还会对这种引用进行缓存,以达到 CPU 和内存的优化.在使用 ES6 classes ...