Leetcode 160 相交链表 (每日一题 20210802)
生活随笔
收集整理的這篇文章主要介紹了
Leetcode 160 相交链表 (每日一题 20210802)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給你兩個單鏈表的頭節點?headA 和 headB ,請你找出并返回兩個單鏈表相交的起始節點。如果兩個鏈表沒有交點,返回 null 。圖示兩個鏈表在節點 c1 開始相交:題目數據 保證 整個鏈式結構中不存在環。注意,函數返回結果后,鏈表必須 保持其原始結構 。示例 1:輸入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3
輸出:Intersected at '8'
解釋:相交節點的值為 8 (注意,如果兩個鏈表相交則不能為 0)。
從各自的表頭開始算起,鏈表 A 為 [4,1,8,4,5],鏈表 B 為 [5,0,1,8,4,5]。
在 A 中,相交節點前有 2 個節點;在 B 中,相交節點前有 3 個節點。
示例?2:輸入:intersectVal?= 2, listA = [0,9,1,2,4], listB = [3,2,4], skipA = 3, skipB = 1
輸出:Intersected at '2'
解釋:相交節點的值為 2 (注意,如果兩個鏈表相交則不能為 0)。
從各自的表頭開始算起,鏈表 A 為 [0,9,1,2,4],鏈表 B 為 [3,2,4]。
在 A 中,相交節點前有 3 個節點;在 B 中,相交節點前有 1 個節點。
示例?3:輸入:intersectVal = 0, listA = [2,6,4], listB = [1,5], skipA = 3, skipB = 2
輸出:null
解釋:從各自的表頭開始算起,鏈表 A 為 [2,6,4],鏈表 B 為 [1,5]。
由于這兩個鏈表不相交,所以 intersectVal 必須為 0,而 skipA 和 skipB 可以是任意值。
這兩個鏈表不相交,因此返回 null 。鏈接:https://leetcode-cn.com/problems/intersection-of-two-linked-listsclass Solution:def getInersectionNode(self, headA:ListNode, headB:ListNode):# 方法一A, B = headA, headBwhile A!=B:if A:A = A.nextelse:A = headBif B:B = B.nextelse:B = headAreturn A# 方法二i, j = 0, 0p, q = headA, headBwhile p:p = p.nexti += 1while q:q = q.nextj += 1for _ in range(i-j):p = p.nextfor _ in range(j-i):q = q.nextwhile p and q and p!=q:p = p.nextq = q.nextreturn p# 方法三stacka, stackb = [], []p, q = headA, headBwhile p:stacka.append(p)p = p.nextwhile q:stackq.append(q)q = q.nexti, j = len(stacka) - 1, len(stackb) - 1ans = Nonewhile i>=0 and j>=0 and stacka[i]!=stackb[j]:ans = stacka[i]i = i - 1j = j - 1return ans
總結
以上是生活随笔為你收集整理的Leetcode 160 相交链表 (每日一题 20210802)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Leetcode 234 回文链表 (每
- 下一篇: Leetcode 300 最长递增子序列