编程算法 - 两个链表的第一个公共结点 代码(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 ...
随机推荐
- GitLab-CI环境搭建与操作手册
第一章 系统安装简介 1.1. 系统结构 GitLab-CI持续集成服务主要包括gitlab.runner 2个模块.Gitlab主要负责代码文件的管理:runner则负责版本编译.存储.推送等任务. ...
- Spring整合Hibernate与Struts
整合S2SH 一.导入jar包 Spring jar包 Hibernate jar包 Struts2 jar包 以上就是整合需要的所有jar包,当然其中有重复的包,(对比之后去掉版本低的就可以了,还有 ...
- BZOJ 1096: [ZJOI2007]仓库建设(DP+斜率优化)
[ZJOI2007]仓库建设 Description L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于高原内陆地区(干燥少雨),L公司一般把产品直接堆放在 ...
- ABC128F Frog Jump
题目链接 题目大意 给定一个长为 $n$ 的数组 $s$,下标从 $0$ 开始.$ 3 \le n \le 10^5$,$-10^9 \le s_i \le 10^9$,$s_0 = s_{n - 1 ...
- CF 964C Alternating Sum
给定两正整数 $a, b$ .给定序列 $s_0, s_1, \dots, s_n,s_i$ 等于 $1$ 或 $-1$,并且已知 $s$ 是周期为 $k$ 的序列并且 $k\mid (n+1)$,输 ...
- POJ 1149 PIGS(Dinic最大流)
PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20738 Accepted: 9481 Description ...
- BZOJ 3509 [CodeChef] COUNTARI ——分块 FFT
分块大法好. 块内暴力,块外FFT. 弃疗了,抄SX队长$silvernebula$的代码 #include <map> #include <cmath> #include & ...
- 【01】react 之 hello world
React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做出来以后,发现这套东西 ...
- hdu 1423 最长上升递增子序列
#include <iostream> #include <cstdio> #include <cstring> using namespace std; ; in ...
- Vijos P1404 遭遇战
背景 你知道吗,SQ Class的人都很喜欢打CS.(不知道CS是什么的人不用参加这次比赛). 描述 今天,他们在打一张叫DUSTII的地图,万恶的恐怖分子要炸掉藏在A区的SQC论坛服务器!我们SQC ...