160. 相交链表
160. 相交链表
1、试题介绍
编写一个程序,找到两个单链表相交的起始节点。
试题链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/
2、java做法
2.1、双重循环
public static ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if(headA == null || headB == null) return null;
while (headA != null) {
ListNode p = headB;
while (p != null) {
if(headA == p) {
return headA;
}
p = p.next;
}
headA = headA.next;
}
return null;
}
测试结果:
2.2、双指针做法
public static ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if(headA == null || headB == null) return null;
ListNode pA = headA;
ListNode pB = headB;
int sizeA = 0;
int sizeB = 0;
while (pA != null || pB != null) {
if(pA != null) {
sizeA++;
pA = pA.next;
}
if(pB != null) {
sizeB++;
pB = pB.next;
}
}
pA = headA;
pB = headB;
if(sizeA > sizeB) {
for(int i = 0;i < sizeA - sizeB;i++) {
pA = pA.next;
}
}else {
for(int i = 0;i < sizeB - sizeA;i++) {
pB = pB.next;
}
}
while (pA != pB ) {
if(pA == null || pB == null) return null;
pA = pA.next;
pB = pB.next;
}
return pA;
}
测试结果:
3、C语言做法
3.1、双重循环
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
if(headA == NULL || headB == NULL) return NULL;
while (headA != NULL) {
struct ListNode* p = headB;
while (p != NULL) {
if(headA == p) {
return headA;
}
p = p->next;
}
headA = headA->next;
}
return NULL;
}
测试结果:
3.2、双指针做法
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
if(headA == NULL || headB == NULL) return NULL;
struct ListNode* pA = headA;
struct ListNode* pB = headB;
int sizeA = 0;
int sizeB = 0;
while (pA != NULL || pB != NULL) {
if(pA != NULL) {
sizeA++;
pA = pA->next;
}
if(pB != NULL) {
sizeB++;
pB = pB->next;
}
}
pA = headA;
pB = headB;
if(sizeA > sizeB) {
for(int i = 0;i < sizeA - sizeB;i++) {
pA = pA->next;
}
}else {
for(int i = 0;i < sizeB - sizeA;i++) {
pB = pB->next;
}
}
while (pA != pB ) {
if(pA == NULL || pB == NULL) return NULL;
pA = pA->next;
pB = pB->next;
}
return pA;
}
测试结果:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
· 用 C# 插值字符串处理器写一个 sscanf