SpringBoot怎么找出两个单链表的交叉节点
发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,这篇文章主要讲解了"SpringBoot怎么找出两个单链表的交叉节点",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"SpringBoot怎么找出两个单链
千家信息网最后更新 2025年02月05日SpringBoot怎么找出两个单链表的交叉节点
这篇文章主要讲解了"SpringBoot怎么找出两个单链表的交叉节点",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"SpringBoot怎么找出两个单链表的交叉节点"吧!
题目:写一个程序找出两个单链表的交叉节点。
思路:单链表A和单链表B,交叉点后的部分是一样的,也就是说长度是一样的,如上所示:c1 → c2 → c3。所以,将单链表A和单链表B相差的部分去掉,依次对应比较等长的部分即可。在计算两个链表的长度之后,比较两个链表的尾节点是否一样,如果不一样说明没有交叉节点,返回NULL。
Language : c
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {struct ListNode *curA = (struct ListNode*)malloc(sizeof(struct ListNode));struct ListNode *curB = (struct ListNode*)malloc(sizeof(struct ListNode)); curA = headA; curB = headB;int length_a = 1;int length_b = 1;int i = 0;if(curA == NULL || curB == NULL){return NULL; }while(curA->next != NULL){ curA = curA->next; length_a++; }while(curB->next != NULL){ curB = curB->next; length_b++; }if(curA != curB){return NULL; } curA = headA; curB = headB;if(length_a > length_b){for(i; i < length_a-length_b; i++){ curA = curA->next; } i = 0; }else if(length_a < length_b){for(i; i < length_b-length_a; i++){ curB = curB->next; } i = 0; }while(curA != curB){ curA = curA->next; curB = curB->next; }return curA;}
Language : cpp
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { ListNode *curA, *curB; curA = headA; curB = headB;if(curA == NULL || curB == NULL){return NULL; }int length_a = getLength(curA);int length_b = getLength(curB);if(length_a > length_b){for(int i=0; i < length_a-length_b; i++){ curA = curA->next; } }else if(length_a < length_b){for(int i=0; i < length_b-length_a; i++){ curB = curB->next; } }while(curA != curB){ curA = curA->next; curB = curB->next; }return curA; }private:int getLength(ListNode *head){int length = 1;while(head->next != NULL){ head = head->next;length++; }return length; }};
Language:python
# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Noneclass Solution(object):def getIntersectionNode(self, headA, headB):""" :type head1, head1: ListNode :rtype: ListNode """if headA is None or headB is None:return Nonepa = headA # 2 pointerspb = headBwhile pa is not pb:# pa先遍历headA,然后再遍历headB# pb先遍历headB,然后再遍历headApa = headB if pa is None else pa.next pb = headA if pb is None else pb.nextreturn pa # 只有两种方式结束循环,一种是pa和pb所指相同,另一种是headA和headB都已经遍历完仍然没有找到。
感谢各位的阅读,以上就是"SpringBoot怎么找出两个单链表的交叉节点"的内容了,经过本文的学习后,相信大家对SpringBoot怎么找出两个单链表的交叉节点这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
两个
节点
交叉
部分
学习
内容
思路
长度
相同
也就是
也就是说
交叉点
只有
如上
就是
情况
所指
文章
方式
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
临沂数据库招聘
网络安全的丽的视频
上海管理软件开发公司有哪些
大话西游2陌上花开服务器
sql数据库日志超大
石家庄服务器
服务器系统怎么使用
可编程网络技术
网络安全手套
分析手机的软件开发
网络安全适度安全原则
一元互联网科技有限公司
GTA服务器里有人开挂
慈利县网络安全检查工作会议
做赌博软件开发者后果怎么样
数据库如何修改打印时间
深圳多森软件开发有限公司
网络安全法韩国
科技改革30条工业互联网
数据库中xz yz怎么读
服务器配置联想
装金蝶的数据库
程序服务器需要重启
java批量导入数据库
自搭服务器 cpu
慈溪嵌入式软件开发项目管理
数据库技术基本概念参考文献
物流软件开发公司前10名
豺狼计划软件开发
本溪app软件开发费用