160. 相交链表
//20220411
题目描述:
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。
题目链接
解题思路:
- 我们首先设定两个指针,第一个指针指向headA(indexA),第二个指针指向headB(indexB),然后两个指针同时遍历,如果indexA遍历到结尾时等于null,则让indexA指向headB(indexB遍历到结尾也同样操作),然后继续遍历,在indexA==indexB时,返回指向结点(该节点为相交的第一个结点,或者为空)
- 证明:我们设两个链表相交前的结点数分别为a、b,设相交部分有c个结点,所以indexA遍历到结尾时走的距离为a+c,同理indexB遍历到结尾时走的距离为b+c,当我们在indexA和indexB遍历完成时做indexA=headB或者indexB=headA操作时,二者第二次到达交点时的距离为a+c+b、b+c+a,可以发现,二者相等了!所以进行此操作后,二者必会在第二次到达链表交点时相遇,此时返回就行
- 另,如果链表无交点且不一样长,二者在进行交换后会同时到达结尾,最终返回的是null;链表一样长,则会同时到达交点或者结尾
- 实现代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode index_a = headA;
ListNode index_b = headB;
while(index_a==null||index_b==null)return null;
while(index_a!=index_b){
index_a = index_a==null?headB:index_a.next;
index_b = index_b==null?headA:index_b.next;
}
return index_a;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
2020-04-11 leetcode_126&127——单词接龙I、II(java实现)