簡體   English   中英

java-理解帶有節點的LinkedList面試問題

[英]java- understanding LinkedList interview questions with nodes

我目前正在閱讀有關編程 面試的詳細信息,並查看關於leetcode的問題,並且在兩個地方都遇到了同樣的困惑。 特別是與LinkedList問題有關,該問題通常涉及使用節點並創建“鏈表”的自定義類實現。 現在,我了解了LinkedList是什么以及如何將每個元素稱為“節點”,等等。但是,當實際使用LinkedList java數據結構時,此級別似乎太低了,這引起了我的困惑。

這實際上與Java Collections List / LinkedList api有關嗎? 似乎並非如此。 例如,如果我在LinkedList api中搜索“ node”,我什至沒有得到任何點擊。

請看下面的leetcode問題:

您將獲得兩個非空鏈表,它們代表兩個非負整數。 這些數字以相反的順序存儲,並且它們的每個節點都包含一個數字。 將兩個數字相加,並將其作為鏈表返回。

您可能會假設兩個數字除了數字0本身以外都不包含任何前導零。

輸入:(2-> 4-> 3)+(5-> 6-> 4)

輸出:7-> 0-> 8

說明:342 + 465 = 807。

讀完此問題后,我去了白板並制定了解決方案。 就像您想象的那樣,當我比較解決方案的答案時,我的代碼與第一行的解決方案有所不同,我立即感到震驚!

我寫了以下內容:

public LinkedList<Integer> addLinkedLists(LinkedList<Integer> l1, LinkedList<Integer> l2)

該解決方案具有以下優勢:

public ListNode addTwoNumbers(ListNode l1, ListNode l2)

請解釋一下我似乎所缺少的東西。 為什么解決方案沒有收到實際的LinkedList數據結構? 該問題明確指出要返回LinkedList,但它返回自定義實現的ListNode。 我似乎對所要詢問的內容缺乏基本的了解。

關於leetcode的問題: https ://leetcode.com/problems/add-two-numbers/description/

除了概念上,這與Java內置的LinkedList沒有關系。

他們在“編程101”(或所謂的“程序”)中教的一件事是鏈表在一般情況下的工作方式。

它們通常以單鏈接列表開始,如Wikipedia所示 ,然后將涵蓋其他類型的鏈接列表,例如雙鏈接列表(這是內置LinkedList的實現方式)。 有關鏈接列表類型的完整列表,請參閱Wikipedia文章(第3節)。

在單鏈接列表中,該列表由節點組成,每個節點都有一個value和對next節點的引用。 在完整列表的實現中,節點在List類的內部(就像由LinkedList完成的一樣),但是對於簡單/早期的實現,僅存在ListNode類,並且列表由對“ head” / first的引用表示列表的節點。

問題正在處理的列表過於簡單。 如果您想針對這種低級編程“破解編碼面試”,則應研究鏈表在內部的工作方式。

您可以閱讀該Wikipedia文章,或在網上搜索有關Java中鏈表的材料。

雖然@Andreas的回答是好的,並且在更高層次上講,但我的誤解似乎是我不熟悉leetcode的工作原理,並且我查看問題的設備使“提交解決方案”部分不容易被注意到。 我的錯誤是認為這是一個獨立的問題。 我沒有在頁面底部注意到以下內容,這意味着如何回答這個問題:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {

    }
}

在面試中,面試官實際上不會告訴您功能簽名是什么樣的。 您將必須根據訪問問題決定功能簽名(當然,受訪者在編寫代碼之前應與訪問者進行討論)。

對於此問題, LinkedList是一個黑匣子,僅使用一些API。 因此,循環列表實際上需要O(n ^ 2)。 因為對於每個元素,您都必須從頭或尾開始,然后逐步移至所需位置。 但是,有了ListNode ,可以有更大的自由度,因此可以在O(n)處循環列表,這也是此問題的優化時間復雜度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM