编程算法 - 两个链表的第一个公共结点 代码(C)
两个链表的第一个公共结点 代码(C)
本文地址: http://blog.csdn.net/caroline_wendy
题目: 输入两个链表, 找出它们的第一个公共结点.
计算链表的长度, 然后移动较长链表的指针, 使其到同样结点的距离的同样, 再同一时候移动两个链表的指针, 找到同样元素.
时间复杂度: O(n)
代码:
/*
* main.cpp
*
* Created on: 2014.6.12
* Author: Spike
*/ /*eclipse cdt, gcc 4.8.1*/ #include <stdio.h>
#include <stdlib.h>
#include <string.h> struct ListNode {
int m_nKey;
ListNode* m_pNext;
}; size_t GetListLength (ListNode* pHead) {
size_t nLength = 0;
ListNode* pNode = pHead;
while (pNode != NULL) {
++nLength;
pNode = pNode->m_pNext;
}
return nLength;
} ListNode* FindFirstCommonNode(ListNode* pHead1, ListNode* pHead2) {
size_t nLength1 = GetListLength(pHead1);
size_t nLength2 = GetListLength(pHead2);
int nLengthDif = nLength1 - nLength2;
ListNode* pListHeadLong = pHead1;
ListNode* pListHeadShort = pHead2;
if (nLength2 > nLength1) {
pListHeadLong = pHead2;
pListHeadShort = pHead1;
nLengthDif = nLength2 - nLength1;
} for (int i=0; i<nLengthDif; ++i)
pListHeadLong = pListHeadLong->m_pNext; while ((pListHeadLong != NULL) && (pListHeadShort != NULL)
&& (pListHeadLong != pListHeadShort)) {
pListHeadLong = pListHeadLong->m_pNext;
pListHeadShort = pListHeadShort->m_pNext;
} ListNode* pFirstCommonNode = pListHeadLong;
return pFirstCommonNode;
} int main(void)
{
ListNode* pHead1 = new ListNode();
ListNode* pHead1Node1 = new ListNode();
ListNode* pHead1Node2 = new ListNode();
ListNode* pHead1Node3 = new ListNode();
ListNode* pHead1Node4 = new ListNode();
pHead1->m_nKey = 1;
pHead1Node1->m_nKey = 2;
pHead1Node2->m_nKey = 3;
pHead1Node3->m_nKey = 6;
pHead1Node4->m_nKey = 7;
pHead1->m_pNext = pHead1Node1;
pHead1Node1->m_pNext = pHead1Node2;
pHead1Node2->m_pNext = pHead1Node3;
pHead1Node3->m_pNext = pHead1Node4;
pHead1Node4->m_pNext = NULL; ListNode* pHead2 = new ListNode();
ListNode* pHead2Node1 = new ListNode();
pHead2->m_nKey = 4;
pHead2Node1->m_nKey = 5;
pHead2->m_pNext = pHead2Node1;
pHead2Node1->m_pNext = pHead1Node3; ListNode* result = FindFirstCommonNode(pHead1, pHead2);
printf("result = %d\n", result->m_nKey); return 0;
}
输出:
result = 6
编程算法 - 两个链表的第一个公共结点 代码(C)的更多相关文章
- 【剑指Offer面试编程题】题目1505:两个链表的第一个公共结点--九度OJ
题目描述: 输入两个链表,找出它们的第一个公共结点. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入的第一行为两个整数m和n(1<=m,n<=1000):代表将要输入的两个链表 ...
- 剑指Offer(三十六):两个链表的第一个公共结点
剑指Offer(三十六):两个链表的第一个公共结点 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.ne ...
- 九度OJ 1505 两个链表的第一个公共结点 【数据结构】
题目地址:http://ac.jobdu.com/problem.php?pid=1505 题目描述: 输入两个链表,找出它们的第一个公共结点. 输入: 输入可能包含多个测试样例. 对于每个测试案例, ...
- C++版 - 剑指offer之面试题37:两个链表的第一个公共结点[LeetCode 160] 解题报告
剑指offer之面试题37 两个链表的第一个公共结点 提交网址: http://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?t ...
- 《剑指offer》第五十二题(两个链表的第一个公共结点)
// 面试题52:两个链表的第一个公共结点 // 题目:输入两个链表,找出它们的第一个公共结点. #include <iostream> #include "List.h&quo ...
- 【剑指offer】两个链表的第一个公共结点,C++实现
原创文章,转载请注明出处! 博客文章索引地址 # 题目 #举例 如果两个单向链表有公共的节点,那么这两个链表从第一个公共结点开始,之后所有结点都是重合的,不可能再出现分叉.拓扑结构如下图所示: # 思 ...
- 剑指Offer - 九度1505 - 两个链表的第一个公共结点
剑指Offer - 九度1505 - 两个链表的第一个公共结点2013-11-24 20:09 题目描述: 输入两个链表,找出它们的第一个公共结点. 输入: 输入可能包含多个测试样例.对于每个测试案例 ...
- php实现找两个链表的第一个公共结点(实例演示)
php实现找两个链表的第一个公共结点(实例演示) 一.总结 因为是链表,第一个节点公共之后,后面所有的节点都公共了 画个图实例演示一下,会超清晰且简单 二.php实现找两个链表的第一个公共结点 题目描 ...
- 【剑指offer】面试题 52. 两个链表的第一个公共结点
面试题 52. 两个链表的第一个公共结点 NowCoder 题目描述 输入两个链表,找出它们的第一个公共结点. Java 实现 ListNode Class class ListNode { int ...
随机推荐
- POJ 3321:Apple Tree(dfs序+树状数组)
题目大意:对树进行m次操作,有两类操作,一种是改变一个点的权值(将0变为1,1变为0),另一种为查询以x为根节点的子树点权值之和,开始时所有点权值为1. 分析: 对树进行dfs,将树变为序列,记录每个 ...
- [JSOI2012][bzoj4332] 分零食 [FFT]
题面 传送门 思路 首先,这个数据如果没有这么大,我们还是可以做朋友的...... 设$dp\left[i\right]\left[j\right]$代表前j个零食分给了前i个人的方案数 那么dp方程 ...
- Python基础教程笔记 第二章
本章的名字虽然叫列表和元组,但是本章讲的最多的是列表,元祖指讲了很少的一部分.因为元组和列表很多方面都是一样的. 列表和元组的区别:列表可以被修改,元祖不可以被修改. python包含的6种内建序列: ...
- 【CCF】路径解析 模拟
#include<iostream> #include<cstdio> #include<string> #include<cstring> #incl ...
- 1.docker学习
Docker —— 从入门到实践 http://udn.yyuap.com/doc/docker_practice/introduction/index.html 非常详细的Docker学习教程 ht ...
- vue 中父子组件传值:props和$emit
更新----------- 1 父组件向子组件传值:通过props数组: 在vue-cli Login.vue父组件中有AcceptAndRefuse.vue子组件,首先import进子组件hello ...
- 使用 swagger组件给asp.net webapi文档生成
1.名词解释 Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法,参数和模 ...
- 序列统计(bzoj 4403)
Description 给定三个正整数N.L和R,统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量.输出答案对10^6+3取模的结果. Input 输入第一行包含一个整数T,表示数据组 ...
- 常用“Request.ServerVariables()”汇总
原文发布时间为:2009-10-25 -- 来源于本人的百度文章 [由搬家工具导入] Request.ServerVariables("REMOTE_ADDR") ...
- LeetCode Weekly Contest 70 A B C D
A. K-th Symbol in Grammar Description On the first row, we write a 0. Now in every subsequent row, w ...