本文共 1020 字,大约阅读时间需要 3 分钟。
链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/
编写一个程序,找到两个单链表相交的起始节点。第一次看到这题目就想了挺久,困惑在两个地方:
1.示例1的相交节点为什么不是1 2.为什么大部分解题思路中都说要走a+c+b,和b+c+a直到看到下面这个非常直观的动图 和 题解思路~
【这道题其实跟 141.环形链表 有点类似,环形链表中题目已经明确说链表是有环的。而这道题只是说了两个链表有相交的节点,那么我们可以改变一下链表的结构,人为的将这个链表变成环形。
我们可以将a和b两个链表强行串联起来,变成一个8字的形状。 原结构如下:将b链表的尾巴指向a节点的头部,将a节点的尾巴指向b链表的头部 然后我们定义两个指针,一个从a链表头出发,一个从b链表头出发,因为是环形的,最终两个链表会相遇,而相遇的节点就是相交的节点】# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self.next = Noneclass Solution(object): def getIntersectionNode(self, headA, headB): """ :type head1, head1: ListNode :rtype: ListNode """ a,b = headA,headB # 定义了两个节点a和b,只要a和b不等就继续遍历 while a!=b: # 这步很关键,请对照动态图配合理解, #当a的下一个为空时,就a就从b链表头开始遍历 a = a.next if a else headB # 同理,b也是类似的 b = b.next if b else headA return a
作者:wang_ni_ma
链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/solution/dong-hua-yan-shi-160-xiang-jiao-lian-biao-by-user7/转载地址:http://vujii.baihongyu.com/