千家信息网

SpringBoot怎么找出两个单链表的交叉节点

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要讲解了"SpringBoot怎么找出两个单链表的交叉节点",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"SpringBoot怎么找出两个单链
千家信息网最后更新 2026年11月03日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安全错误 数据库的锁怎样保障安全 关于新基建和互联网科技 华宇互联网科技 互联网 卓越科技 齐家互联网科技 互联网科技公司官网 四个字互联网科技公司取名 成都仁贤领冠互联网科技有限公司 中盈科技互联网信息有限公司 广州优美互联网科技 成都互联网科技公司100强 金融科技与互联网金融相同和不同 贵州叶脉互联网科技有限公司所属行业 昭通互联网科技选哪家 知域互联网科技有限公司大骗子 消费医药和互联网科技 亳州好赞互联网科技有限公司 互联网在线教育科技创业 城市宝互联网科技有限公司 浙南科技城互联网大厦招聘 华人运通互联网科技公司 互联网科技公司的优势 睿民互联网科技 猫创互联网科技 衡水科技产业互联网平台 广州互联网高科技取餐柜 北京天晋互联网科技有限公司 绵阳真晨互联网科技有限公司 平安好医生打造互联网科技医疗 伍佰万互联网科技是干嘛的 小牛互联网科技有限公司地址
0