NOTE

相交链表

相交链表的 LeetCode 解题笔记。

Data Structures & Algorithms创建于 更新于 约 1 分钟读完historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 题目描述

编写一个程序,找到两个单链表相交的起始节点。

2. 思路

  1. 思路一
    • 相交意味着相交节点之后的节点是重合的
    • 先让长链表走差值步,然后一起走到相同的节点

3. 实现

3.1. 差值

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func getIntersectionNode(headA, headB *ListNode) *ListNode {
    lengthA := getLength(headA)
    lengthB := getLength(headB)
    if lengthA > lengthB {
        headA = runNSteps(headA, lengthA-lengthB)
    }else {
        headB = runNSteps(headB, lengthB-lengthA)
    }
    for headA != nil {
        if headA == headB {
            return headA
        }
        headA=headA.Next
        headB=headB.Next
    }
    return nil
}

func runNSteps(h *ListNode, n int) *ListNode {
    for i :=0 ;i < n;i++ {
        h = h.Next
    }
    return h
}

func getLength(head *ListNode) int {
    var length int
    for head != nil {
        length++
        head = head.Next
    }
    return length
}

4. 参考

讨论

使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看