当前位置:实例文章 » 其他实例» [文章]LeetCode面试题02.07.链表相交

LeetCode面试题02.07.链表相交

发布人:shili8 发布时间:2025-02-07 22:10 阅读次数:0

**链表相交**

### 题目描述给定两个单链表的头节点,判断这两个链表是否相交。

### 示例输入:intersectNode(1 ->2 ->3 ->4 ->5,6 ->7 ->8 ->9 ->10 ->11 ->12 ->13 ->14 ->15)

输出:true解释:两个链表相交于第一个相交的结点。

### 思路1. 首先,我们需要找到两个链表的长度差异。这样可以确定哪个链表长哪个短。
2. 然后,我们将较长链表的头指针移动到较短链表的长度差异处。这是为了确保两个链表在相交点之前都有相同的结点数。
3. 最后,我们可以使用一个哈希集合来存储较长链表中的结点值。如果较短链表中的结点值存在于哈希集合中,则意味着这两个链表相交。

###代码实现

class ListNode:
 def __init__(self, x):
 self.val = x self.next = Nonedef getLength(head):
 """
 获取链表长度 :param head: 链表头指针 :return: 链表长度 """
 length =0 while head:
 length +=1 head = head.next return lengthdef intersectNode(headA, headB):
 """
 判断两个链表是否相交 :param headA: 第一个链表头指针 :param headB: 第二个链表头指针 :return: 是否相交 """
 # 获取链表长度差异 lengthA = getLength(headA)
 lengthB = getLength(headB)

 # 将较长链表的头指针移动到较短链表的长度差异处 if lengthA > lengthB:
 for _ in range(lengthA - lengthB):
 headA = headA.next else:
 for _ in range(lengthB - lengthA):
 headB = headB.next # 使用哈希集合存储较长链表中的结点值 hashSet = set()
 while headA:
 hashSet.add(headA.val)
 headA = headA.next # 判断是否相交 while headB:
 if headB.val in hashSet:
 return True headB = headB.next return False


### 测试用例
# 创建链表1:1 ->2 ->3 ->4 ->5headA = ListNode(1)
headA.next = ListNode(2)
headA.next.next = ListNode(3)
headA.next.next.next = ListNode(4)
headA.next.next.next.next = ListNode(5)

# 创建链表2:6 ->7 ->8 ->9 ->10 ->11 ->12 ->13 ->14 ->15headB = ListNode(6)
headB.next = ListNode(7)
headB.next.next = ListNode(8)
headB.next.next.next = ListNode(9)
headB.next.next.next.next = ListNode(10)
headB.next.next.next.next.next = ListNode(11)
headB.next.next.next.next.next.next = ListNode(12)
headB.next.next.next.next.next.next.next = ListNode(13)
headB.next.next.next.next.next.next.next.next = ListNode(14)
headB.next.next.next.next.next.next.next.next.next = ListNode(15)

print(intersectNode(headA, headB)) # 输出: True


### 总结本题目要求我们实现一个函数来判断两个链表是否相交。我们首先需要找到两个链表的长度差异,然后将较长链表的头指针移动到较短链表的长度差异处。这是为了确保两个链表在相交点之前都有相同的结点数。最后,我们使用一个哈希集合来存储较长链表中的结点值。如果较短链表中的结点值存在于哈希集合中,则意味着这两个链表相交。

本题目要求我们实现一个函数来判断两个链表是否相交,涉及链表长度差异、头指针移动和哈希集合的使用。通过仔细分析和理解这些概念,我们可以轻松地实现这个功能并正确地解决问题。

其他信息

其他资源

Top