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. 相交链表的主要内容,如果未能解决你的问题,请参考以下文章

160链表-相交链表

链表--相交链表(leetcode 160

LeetCode系列160. 相交链表

160. 相交链表

代码随想录算法训练营第四天 | 24.两两交换链表中的节点19.删除链表的倒数第N个节点160.相交链表142.环形链表II

LeetCode 160. 相交链表