160. 相交链表
Posted lgz0921
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了160. 相交链表相关的知识,希望对你有一定的参考价值。
题目链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/
思路:两个指针对应两条链一起遍历,当一条遍历完就去遍历另一条(两个指针都是这样操作),这样最后两个指针一定会相等。如果有交叉,最后两个指针都指向同一个节点(交叉位置),如果没有交叉,最后两个指针都指向null(有交叉,没交叉,都是正好把所有节点遍历了一遍)。当两个指针相等的时候,返回它们指向的节点(或者指向的null)即可。
上代码:
/**
* Example:
* var li = ListNode(5)
* var v = li.`val`
* Definition for singly-linked list.
* class ListNode(var `val`: Int) {
* var next: ListNode? = null
* }
*/
class Solution {
fun getIntersectionNode(headA: ListNode?, headB: ListNode?): ListNode? {
if (headA == null || headB == null) return null
var a = headA
var b = headB
while (a != b) {
a = if (a == null) {
headB
} else {
a.next
}
b = if (b == null) {
headA
} else {
b.next
}
}
return a
}
}
以上是关于160. 相交链表的主要内容,如果未能解决你的问题,请参考以下文章
代码随想录算法训练营第四天 | 24.两两交换链表中的节点19.删除链表的倒数第N个节点160.相交链表142.环形链表II