题目

解题

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None


def getIntersectionNode(headA, headB):
    """
    找到两个单链表相交的起始节点。

    参数:
    headA (ListNode): 第一个链表的头节点。
    headB (ListNode): 第二个链表的头节点。

    返回值:
    ListNode: 相交的起始节点,如果不相交则返回 None。
    """
    if not headA or not headB:
        return None

    # 初始化两个指针
    pA, pB = headA, headB

    # 当两个指针相等时,表示找到了相交点
    while pA != pB:
        # 如果 pA 走到尽头,则开始遍历 headB
        pA = pA.next if pA else headB
        # 如果 pB 走到尽头,则开始遍历 headA
        pB = pB.next if pB else headA

    return pA


# 测试函数
def test_getIntersectionNode():
    # 创建链表
    # A链表: 4 -> 1
    #               \
    #                8 -> 4 -> 5
    #               /
    # B链表:    5 -> 0 -> 1
    # 相交节点为 8

    # 创建交点和后续部分
    intersection = ListNode(8)
    intersection.next = ListNode(4)
    intersection.next.next = ListNode(5)

    # 创建链表A
    headA = ListNode(4)
    headA.next = ListNode(1)
    headA.next.next = intersection

    # 创建链表B
    headB = ListNode(5)
    headB.next = ListNode(0)
    headB.next.next = ListNode(1)
    headB.next.next.next = intersection

    # 找到相交节点
    result = getIntersectionNode(headA, headB)
    if result:
        print(f"相交的起始节点值: {result.val}")
    else:
        print("没有相交节点")


# 运行测试函数
test_getIntersectionNode()
08-02 08:40