51-Intersection of Two Linked Lists
2024-09-06 12:38:56
- Intersection of Two Linked Lists My Submissions QuestionEditorial Solution
Total Accepted: 72580 Total Submissions: 239762 Difficulty: Easy
Write a program to find the node at which the intersection of two singly linked lists begins.
For example, the following two linked lists:
A: a1 → a2
c1 → c2 → c3
B: b1 → b2 → b3
begin to intersect at node c1.
思路:两条链表如果相交,那从交点开始,后面一定都是相等的
那如何求第一个交点呢?
时间复杂度:O(n)
要么返回空
有交点时,说明尾部是对齐的,要找到第一个交点,只要让长的链表先走len1-len2步,这里假设len1是那条长链,那么此时再同时走,相遇的第一个节点便是交点
/**
* 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) {
if(headA==NULL||headB==NULL)return NULL;//有一为空返回
if(headA==headB)return headA;//头部相同返回
ListNode *l1=headA,*l2=headB;
int len1=1,len2=1;
while(l1->next){//遍历记录长度
l1=l1->next;
len1++;
}
while(l2->next){
l2=l2->next;
len2++;
}
ListNode *p = len1>len2?headA:headB; //p为长链表
ListNode *psmall=len1>len2?headB:headA; //psmall为短链表
int count=abs(len2-len1);
while(count--){
p=p->next;
}
while(p!=NULL&&psmall!=p){
p=p->next;
psmall = psmall->next;
}
if(p!=NULL)return p; //有交点
else return NULL; //无交点
}
};
最新文章
- select 选择的制作
- hsql数据库使用详解(入门)及快速使用
- php基础排序算法 冒泡排序 选择排序 插入排序 归并排序 快速排序
- ruby 学习笔记 2 -变量
- 多线程(pthread、NSThread、GCD)
- LightOJ::1077 -----奇妙的最大公约数
- 统计类别数量并且使用pyplot画出柱状图
- PLSQL_基础系列04_时间间隔INTERVAL(案例)
- 密码强度应用(js)
- vue写请求接口--请求参数的变量要在return里面声明
- Android NDK编程,引入第三方.so库
- C/C++中的&;&;和||运算符
- 自己动手写CPU之第五阶段(3)——MIPS指令集中的逻辑、移位与空指令
- Find and run the whalesay image
- 看我如何粘贴别人代码--socketserver
- 获取各种编码(Unicode,UTF8等)的识别符
- EventTrigger动态添加监听事件
- JavaSE-基础语法(二)-系统类(java.lang.*)和工具类(java.util.*)
- 队列queue 代码
- Stanford CS231n实践笔记(课时14卷积神经网络详解 上)