世界即時看!#yyds干貨盤點# LeetCode程序員面試金典:鏈表相交

2022-12-12 19:04:29 來源:51CTO博客


【資料圖】

題目:

給你兩個單鏈表的頭節點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 。

代碼實現:

public class Solution {    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {        if (headA == null || headB == null) {            return null;        }        ListNode pA = headA, pB = headB;        while (pA != pB) {            pA = pA == null ? headB : pA.next;            pB = pB == null ? headA : pB.next;        }        return pA;    }}

標簽: 開始算起 必須保持 題目數據

上一篇:GO 學習
下一篇:#yyds干貨盤點# 名企真題專題:獲得最多的獎金