算法面试100题——7.微软亚院之编程判断俩个链表是否相交

微软的100道算法面试题(一) 程序员为什么要学数据结构? 在计算机发展的初期,人们使用计算机的主要目的是处理数值计算问题。使用计算机解决具体问题一般需要经过以下几个步骤:首先从具体问题抽象出适当的数学模型,然后设计或选择解此数学模型的算法,接着编写程序并进行调试、测试,直至得到最终的解答。 由于最初涉及的运算对象是简单的整型、实型或布尔型数据,所以程序设计者的主要精力集中于程序设计的技巧上,而无需重视数据结构。随着计算... 阅读详情

1、题目:给出俩个单向链表的头指针,比如h1,h2,判断这俩个链表是否相交。
为了简化问题,我们假设俩个链表均不带环。
2、知识点:链表、排序
3、思路:将指向结点的指针排序,排序后判断指针是否相交。排序复杂度为O(NlogN),判断相交的复杂度为O(M+N)。

/*用途:
**说明:
**算法:复制结点指针,排序 
*/

//#define LOCAL
#include <cstdio>
#include <cstdlib>
#include <functional>
using namespace std;
#define MAXN 100

struct Node{
    int data;
    Node* next;
};
typedef Node* LinkList;

Node* NewNode();
Node* NewNode(int val);
Node* GetCross(LinkList head1, LinkList head2);
int CmpPNode(const void* a, const void* b);
int main()
{
#ifdef LOCAL
    freopen(".in", "r", stdin);
    freopen(".out", "w", stdout);
#endif

//  printf("%d\n", sizeof(Node*));
//  printf("%d\n", sizeof(Node));

    LinkList head1 = NewNode();
    Node* n1 = NewNode(1);
    head1->next = n1;
    Node* n2 = NewNode(2);
    n1->next = n2;
    Node* n3 = NewNode(3);
    n2->next = n3;
    Node* n4 = NewNode(4);
    n3->next = n4;
    Node* n5 = NewNode(5);
    n4->next = n5;

    LinkList head2 = NewNode();
    Node* n6 = NewNode(9);
    head2->next = n6;
    Node* n7 = NewNode(8);
    n6->next = n7;

    n7->next = n3;

    printf("%p\n", n2->next);
    printf("%p\n", n7->next);

    Node* cr = GetCross(head1, head2);
    if(cr)
        printf("%d", cr->data);

    return 0;
}

Node* NewNode()
{
    Node* node = (Node*)malloc(sizeof(Node));
    node->data = 0;
    node->next = NULL;
}

Node* NewNode(int val)
{
    Node* node = (Node*)malloc(sizeof(Node));
    node->data = val;
    node->next = NULL;
}

Node* GetCross(LinkList head1, LinkList head2)
{
    if(head1->next==NULL || head2->next==NULL)
        return NULL;

    int arr1Len=0, arr2Len = 0;
    Node* arr1[MAXN];
    Node* arr2[MAXN];

    while(head1->next || head2->next){
        if(head1->next){
            arr1[arr1Len++] = head1->next;
            head1 = head1->next;
        }
        if(head2->next){
            arr2[arr2Len++] = head2->next;
            head2 = head2->next; 
        }
    }

    qsort(arr1, arr1Len, sizeof(Node*), CmpPNode);
    qsort(arr2, arr2Len, sizeof(Node*), CmpPNode);
    for(int i=0, j=0; i<arr1Len && j<arr2Len;){
        if(arr1[i] == arr2[j])
            return arr1[i];
        else if(arr1[i] < arr2[j])
            i++;
        else 
            j++;
    } 
    return NULL;
}

int CmpPNode(const void* a, const void* b)
{
    return *(Node**)a - *(Node**)b;
}
(04730)半导体器件之基本放大器工作原理(一) 放大器是构成各种电子线路的基本单元电路。所谓“放大”,就是将输入的微弱信号(微弱变化的电压或电流等)去控制直流电源提供的能量,并使输出按照输入的小信号变化规律而变化的过程。所以放大器的本质是能量转换器。本节重点学习基本放大电路的工作原理和基本分析方法及主要性能指标。 阅读详情

相关推荐

ArcGIS License Server点击启动没反应,许可管理器无法启动怎么办

4 当我们再打开ArcGIS License Server Administrator的时候。3 在【服务】中找到【ArcGIS License Manager】双击。无法启动ArcGIS License Server的情况。在使用ArcGIS的过程中,我们经常会遇到。专注GIS领域知识分享,交流行业软件技巧。欢迎关注,不定期分享GIS各种问题和技巧。1 右击我的电脑——【管理】服务状态——启动,确定即可。启动类型选择——自动。

GIS蒲公英的博客 2万+

微软亚洲研究院面试编程题之判断两个链表是否相交

给出两个单向链表的头指针,比如h1,h2。判断这两个链表是否相交。为了简化问题,我们假设两个链表均不带环。问题扩展: 1.如果链表可能有环列?2.如果需要求出两个链表相交的第一个节点列?//链表结构体 typedef struct ListNode{ int value; ListNode *next;}ListNode;//方法一:链表无环(判断两个单链表是否存在交点) bool i

吾尝终日而思矣,不如须臾之所学也 498

基于PLC的图书馆机器人设计与仿真

本文设计了一种基于PLC的图书馆机器人系统,该系统能提升图书馆自动化管理水平,选用西门子S7-1200系列PLC作为核心控制单元,结合电机驱动、传感器采集以及超声波避障等技术,设计出机器人行走、图书识别与分拣的功能模块,系统借助条形码扫描模块获取图书信息,将其分析后与设定的存放位置做对比,精准达成图书的存取和归还。仿真结果显示,机器人执行任务时运动控制响应时间是0.35秒,避障成功率为98.3%,图书识别准确率高达99.4%,在控制系统方面,运用STEP7-MICRO/WIN软件编程,结合WINCC设计组态

weixin_44553616的博客 1924

【编程题目】编程判断俩个链表是否相交 ☆

第 7 题(链表)微软亚院之编程判断俩个链表是否相交给出俩个单向链表的头指针,比如 h1,h2,判断这俩个链表是否相交。为了简化问题,我们假设俩个链表均不带环。问题扩展:1.如果链表可能有环列?2.如果需要求出俩个链表相交的第一个节点列?   看到这个题目我很困惑。如果链表的结构是下面这个样子 typedef struct ListNode { int m_Value; ...

weixin_34068198的博客 157

LabVIEW事件结构避坑指南:为什么你的‘确定按钮’事件有时会失灵?

本文深入探讨了LabVIEW事件结构中'确定按钮'事件失灵的常见原因及解决方案。从事件队列机制到事件类型选择,详细分析了事件丢失的五大原因,包括事件处理耗时过长、事件类型选择不当等,并提供了优化登录界面案例的实用建议。掌握这些技巧可显著提升LabVIEW用户界面的响应可靠性。

weixin_42548888的博客 355

【安徽理工大学】一文带你高分拿下计算机考研复试(85+的秘密)

一文带你高分拿下安徽理工大学计算机考研复试(85+的秘密)

猫天意的博客 1523

7 微软亚院之编程判断俩个链表是否相交,相交的首节点

/* 第 7 题 微软亚院之编程判断俩个链表是否相交 给出俩个单向链表的头指针,比如 h1,h2,判断这俩个链表是否相交。 为了简化问题,我们假设俩个链表均不带环。 问题扩展: 1.如果链表可能有环列? 2.如果需要求出俩个链表相交的第一个节点列? 给定两单链表A、B,只给出两头指针。请问: 1、如何判断两单链表(无环)是否相交? 判断两链表最后一个节点是否相同,如果相交,则尾节点肯定是同

小人物的草稿本 1131

PLc S7-200 smart如何使用Modbus 485通讯传输接收数据

西门子在 STEP 7-Micro/WIN SMART 中正式推出 Modbus RTU 主站协议库(西门子标准库指令)。使用 Modbus RTU 主站指令库,可以读写 Modbus RTU 从站的数字量、模拟量 I/O 以及保持寄存器,从而实现PLC通过modbus方式控制其他器件。提示:以下是本篇文章正文内容,下面案例可供参考。

xjbsw0的博客 6万+

微软亚院之编程判断俩个链表是否相交

微软亚院之编程判断俩个链表是否相交 给出俩个单向链表的头指针,比如h1,h2,判断这俩个链表是否相交。 为了简化问题,我们假设俩个链表均不带环。 问题扩展: 1.如果链表可能有环列? 2.如果需要求出俩个链表相交的第一个节点列? ANSWER: struct Node {   int data;   int Node *next; }; // if there is no c

小乌龟富兰克林 1287

ESP32基于Arduino环境开发128*160 TFT_LCD屏幕显示照片

ESP32基于Arduino环境开发128*160 TFT_LCD屏幕显示照片

weixin_42854045的博客 2059

YOLOv8 眼底病变检测(眼底照片)详细说明

本文介绍了基于YOLOv8的眼底病变自动检测系统。该系统可识别糖尿病视网膜病变、青光眼等5类常见眼底病变,包括微动脉瘤、出血点等特征。核心技术包含图像预处理、模型训练、病变检测与量化分析三个模块,采用1024×1024高分辨率输入,针对医学图像特点优化数据增强策略。系统支持批量处理、可视化标注和临床报告生成,提供病变数量、面积密度和严重程度评分等量化指标。特别强调医学合规性要求,需专业医生参与数据标注和模型验证,符合医疗器械认证标准。该系统可作为眼科医生的辅助诊断工具,提高眼底病变筛查效率。

u010117029的博客 133

7、微软亚院之编程判断俩个链表是否相交

题目: 给出俩个单向链表的头指针,比如h1,h2,判断这俩个链表是否相交。 为了简化问题,我们假设俩个链表均不带环。 问题扩展: 1.如果链表可能有环列? 2.如果需要求出俩个链表相交的第一个节点列? 参考:http://blog.csdn.net/shiren_bod/article/details/6651703 分析: 方法一、循环判断第一个链表是否有结点在第二个链表中。

zwb8848happy的专栏 3288

【使用DeepSeek辅助Python接口性能自动化测试教程-实战教程】

访问DeepSeek官方网站,注册账号并获取API Key。此Key是调用DeepSeek API的必要凭证,务必妥善保管。安装时,注意勾选“Add Python to PATH”选项,以便系统能识别Python命令。确保你已安装Python 3.8或更高版本。会自动发现并执行所有以。

Dreams°的博客 2466

微软公司等数据结构+算法面试100题

微软等公司数据结构+算法面试100题(第1-100题)首次完整亮相 注:本文转自July的博客:http://blog.csdn.net/v_july_v/article/details/6057286,十分感谢!更新:现今,这100题的答案已经全部整理出来了,微软面试100题2010年版全部答案集锦:http://blog.csdn.net/v_july_v/article/details/68

黄复贵的博客 6598

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

算法面试 精选微软经典的算法面试100题(第21-25题)

算法面试 精选微软经典的算法面试100题(第21-25题)

gdfyug的博客 2385

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

算法面试:精选微软经典的算法面试100题

<br /><br />微软等数据结构+算法面试100题首次完整亮相     (注:本文转自July)<br />            ---100题V0.1版最终完成<br /> <br />================<br />作者:July  2010年12月6日<br />微软等100题系列V0.1版终于结束了。<br />从2010年10月11日当天最初发表前40题以来,直至此刻,整理这100题,已有近2个月。<br />2个月,因为要整理这100题,很多很多其它的事都被我强迫性的搁置一旁

慢慢的前进 1509

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

数据结构+算法面试100题

他们决定这么分: 抽签决定自己的号码(1、2、3、4、5) 首先,由1号提出分配方案,然后大家表决,当且仅当超过半数的人同意时, 按照他的方案进行分配,否则将被扔进大海喂鲨鱼 如果1号死后,再由2号提出分配方案,然后剩下的4人进行表决, 当且仅当超过半数的人同意时,按照他的方案进行分配,否则将被扔入大海喂鲨鱼。那就, 连续来几组微软公司的面试题,让你一次爽个够: ====================== 97.第1组微软较简单的算法面试题 1.编写反转字符串的程序,要求优化速度、优化空间。

2301_78102191的博客 2426

微软面试100题及答案

从百度文库下载的下载需要积分,贴在这大家随便看就好,不要追究我盗版,哈哈。。。 1.把二元查找树转变成排序的双向链表  题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。    10   / \   6 14  / \ / \ 4  8 12 16  转换成双向链表 4=6=8=10=12=14=16。

zhanghaotian2011的专栏 5128

微软面试100道之7 判断俩个链表是否相交

第7题(链表) 微软亚院之编程判断俩个链表是否相交 给出俩个单向链表的头指针,比如h1,h2,判断这俩个链表是否相交。 为了简化问题,我们假设俩个链表均不带环。 问题扩展: 1.如果链表可能有环列? 2.如果需要求出俩个链表相交的第一个节点列? 以下是以按没有环来设计: #include using namespace std ; struct Lin

domwin300208的专栏 555

算法面试:精选微软经典的算法面试100题(第1-20题)

算法面试:精选微软经典的算法面试100题[1-10]引言:给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数要求下排每个数都是先前上排那十个数在下排出现的次数。上排的十个数如下:【0,1,2,3,4,5,6,7,8,9】举一个例子,数值:0,1,2,3,4,5,6,7,8,9分配:6,2,1,0,0,0,1,0,0,00在下排出现了6次,1在下排出现了2次,2在下排出现了1次,3在下排出现了0次....以此类推..1.把二元查找树转变成排序的双向链表 题目:输入一棵二元查找树,将该二元查找树转换

结构之法 算法之道 4万+

微软100题

转自july学长博客,自己保存一份以防万一。 1.把二元查找树转变成排序的双向链表(树)  题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。    10   / /   6  14  / / / / 4  8 12 16  转换成双向链表 4=6=8=10=12=14=16。    首先我们定义的二

我从废墟中走来 1795

微软公司等数据结构+算法面试100题2010版全部出炉

1.把二元查找树转变成排序的双向链表(树) 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。    10   / /   6  14 / / / / 4  8 12 16 转换成双向链表 4=6=8=10=12=14=16。 首先我们定义的二元查找树 节点的数据结构如下: struct BSTreeNod

落日小屋 2394

<转>算法面试:精选微软等公司经典的算法面试100题 第1-40题 仅供学习

原文地址:http://topic.csdn.net/u/20101023/20/5652ccd7-d510-4c10-9671-307a56006e6d.html 特此,整理已在上贴公布的,微软等公司数据结构+算法面试100题之前40题。依旧 为了寻找更好的解题思路,更好的算法,更高的效率。由于已在上一贴,公布了前第1题-第24题的思路及 源码(全在上一贴的第5页),所以,请 尽量 顾及第25...

weixin_33698043的博客 284

微软等数据结构+算法面试100题

微软等100题系列V0.1版终于结束了。 从2010年10月11日当天最初发表前40题以来,直至此刻,整理这100题,已有近2个月。 2个月,因为要整理这100题,很多很多其它的事都被我强迫性的搁置一旁, 如今,要好好专心去做因这100题而被耽误的、其它的事了。 这微软等数据结构+算法面试100题系列(是的,系列),到底现在、或此刻、或未来,对初学者有多大的意义,...

wdp107 732

数据结构+算法面试100题~~~摘自优快云,作者July

1.把二元查找树转变成排序的双向链表(树) 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。 10 / / 6 14 / / / / 4 8 12 16 转换成双向链表 4=6=8=10=12=14=16。 首先我们定义的二元查找树 节点的数据结构如下: struct BSTreeNode { int

janvinal的专栏 1803
上一篇: 算法面试100题——4.在二元树中找出和为某一值的所有路径
下一篇: 算法面试100题——8.逻辑思维题
EverydayIsLife
博客等级 码龄12年 9粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值