Java 链表面试问题

Java 链表面试问题,java,linked-list,Java,Linked List,这是采访中提出的问题。有人能帮我用java实现吗 给定2个不需要唯一元素的链接列表,以Y的形式查找交点。根据@Lord Torgamus问题,它可以位于中间或尾部的任何位置,这里是一个建议的java算法 假设您有两个java对象,并且作为的实现者,也是集合的实现者。要找到它们的交集,只需调用第一个对象上的方法,将第二个对象作为参数。根据@Lord Torgamus问题,这里有一个建议的java算法 假设您有两个java对象,并且作为的实现者,也是集合的实现者。要找到它们的交点,只需调用第一个对象

这是采访中提出的问题。有人能帮我用java实现吗
给定2个不需要唯一元素的链接列表,以Y的形式查找交点。根据@Lord Torgamus问题,它可以位于中间或尾部的任何位置,这里是一个建议的java算法


假设您有两个java对象,并且作为的实现者,也是集合的实现者。要找到它们的交集,只需调用第一个对象上的方法,将第二个对象作为参数。

根据@Lord Torgamus问题,这里有一个建议的java算法

假设您有两个java对象,并且作为的实现者,也是集合的实现者。要找到它们的交点,只需调用第一个对象上的方法,并将第二个对象作为参数

我目前没有一个好的例子,但我相信他指的是:

两个集合的交集是仅包含两个集合共有的元素的集合

其中“集合”也可以是列表等

Java为此内置了方法

假设您有一个列表,您可以这样做:

list.removeAlllist2

list.retainallist2

retainAll将为您提供“交叉点”,removeAll将为您提供两个列表之间的差异

我目前没有一个好的例子,但我相信他指的是:

两个集合的交集是仅包含两个集合共有的元素的集合

其中“集合”也可以是列表等

Java为此内置了方法

假设您有一个列表,您可以这样做:

list.removeAlllist2

list.retainallist2


retainAll将为您提供“交叉点”,removeAll将为您提供两个列表之间的差异。

如果列表的长度为ON,则此解决方案将启用O1空格


本质上,遍历每个列表以查找有多少节点。然后,从较长的列表中跳过足够的元素,这样现在就有了相同长度的列表。然后,同步前进,直到两个列表相遇。

如果列表的长度为ON,则此解决方案将启用O1空格


本质上,遍历每个列表以查找有多少节点。然后,从较长的列表中跳过足够的元素,这样现在就有了相同长度的列表。然后,同步前进,直到两个列表相交。

通过交点,它们是指一组元素相交的地方,还是仅仅是一个元素重叠的地方?请说明您是如何解决问题的,以及在这种情况下您感到困惑的地方,可能是您没有想到一个好的算法。我希望你要么要求一个算法,要么展示你在Java中实现它时遇到的困难。@justkt:两个链表可以有单个元素重叠的唯一方法是它们在两个列表的尾部相交。我没有想到好的算法。@Jason,我不明白;你能提供详细信息吗?交叉点是指一组元素的交叉点,还是仅仅是一个元素的重叠点?请说明你是如何处理这个问题的,在这种情况下,你感到困惑的地方,可能是你没有想到一个好的算法。我希望你要么要求一个算法,要么展示你在Java中实现它时遇到的困难。@justkt:两个链表可以有单个元素重叠的唯一方法是它们在两个列表的尾部相交。我没有想到好的算法。@Jason,我不明白;你能提供细节吗?那么,重点是什么?我认为他没有把问题具体化。为了澄清问题,我可能过度简化了他的问题。考虑到“点”部分,可能会更复杂一些。但是,点部分是什么呢?我认为他没有把问题具体化。为了澄清问题,我可能过度简化了他的问题。考虑到“点”部分,可能会更复杂一些。@Polygene润滑油,这是怎么回事?列表比较将打开,并且您最多执行n次。例如,使用列表{1,2,3,4}和{1,2,3,5}运行上述代码@Jasmeet,列表1!=list2只是对这两个列表节点的地址进行O1比较,而不是逐个元素进行比较,所以总体上是打开的。关键在于,在两个列表中,交点与端点的距离必须相同,因此比较相应的元素就足以找到它。@Polygene,这是如何启用的?列表比较将打开,并且您最多执行n次。例如,使用列表{1,2,3,4}和{1,2,3,5}运行上述代码@Jasmeet,列表1!=list2只是对这两个列表节点的地址进行O1比较,而不是逐个元素进行比较,所以总体上是打开的。关键在于,在两个列表中,交点与端点的距离必须相同 ,所以比较相应的元素就足够找到它了。
FUNCTION length(LIST list) : INT
// returns number of nodes until the end of the list

FUNCTION skip(LIST list, INT k) : LIST
// return the sublist of list, skipping k nodes

FUNCTION intersection(LIST list1, list2) : LIST
// returns the sublist where the two lists intersects
  INT n1 = length(list1);
  INT n2 = length(list2);

  IF (n1 > n2) THEN
     list1 = skip(list1, n1-n2)
  ELSE
     list2 = skip(list2, n2-n1)

  WHILE (list1 != list2)
    list1 = skip(list1, 1)
    list2 = skip(list2, 1)

  RETURN list1