繁体   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