Data structures 通过集合框架展平多级链表
以这个例子为例 在java中,我能够通过集合展平多级链表,但无法在给定节点及其子节点和下一个节点之间建立关系。在当前示例中,10具有值为4、20和13的子节点。我想以更好的方式使用Collections框架,可以指定子节点和下一个节点,然后对给定的输入应用展平操作。请帮帮我Data structures 通过集合框架展平多级链表,data-structures,java-8,java-stream,Data Structures,Java 8,Java Stream,以这个例子为例 在java中,我能够通过集合展平多级链表,但无法在给定节点及其子节点和下一个节点之间建立关系。在当前示例中,10具有值为4、20和13的子节点。我想以更好的方式使用Collections框架,可以指定子节点和下一个节点,然后对给定的输入应用展平操作。请帮帮我 List<List<Integer>> obj =new LinkedList<List<Integer>>(); obj.add(Arrays.asList(
List<List<Integer>> obj =new LinkedList<List<Integer>>();
obj.add(Arrays.asList(10,5,12,7,11));
obj.add(Arrays.asList(4,20,13,17,6));
obj.add(Arrays.asList(2,16,9,8));
obj.add(Arrays.asList(3,19,15));
obj.stream().flatMap(e->e.stream()).forEach(i->System.out.print(i+" "));;
List obj=new LinkedList();
对象添加(Arrays.asList(10,5,12,7,11));
对象添加(Arrays.asList(4,20,13,17,6));
对象add(Arrays.asList(2,16,9,8));
obj.add(Arrays.asList(3,19,15));
obj.stream().flatMap(e->e.stream()).forEach(i->System.out.print(i+);;
我解决了问题,这里是代码
import java.util.*;
import java.lang.*;
import java.io.*;
class Node {
int data;
List<Node> child;
public Node(int data, List<Node> child) {
this.data = data;
this.child = child;
}
@Override
public String toString() {
return data+" ";
}
}
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
List<Node> obj1 = new LinkedList<Node>();
obj1.add(new Node(10, Arrays.asList(new Node(4,null),new Node(20,Arrays.asList(new Node(2, null))),
new Node(13,Arrays.asList(new Node(16, Arrays.asList(new Node(3, null))))) )));
obj1.add(new Node(5, null));
obj1.add(new Node(12,null));
obj1.add(new Node(7,Arrays.asList(new Node(17, Arrays.asList(new Node(9, Arrays.asList(new Node(19, null),
new Node(15, null))),new Node(8, null))
),new Node(6, null))
));
obj1.add(new Node(11,null));
int tail=obj1.size();
for(int i=0;i<tail;i++)
{
Node n=obj1.get(i);
if(n.child!=null)
{
for(Node o:n.child)
{
obj1.add(tail, o);
tail++;
}
n.child=null;
}
}
System.out.println(obj1);
}
}
import java.util.*;
导入java.lang.*;
导入java.io.*;
类节点{
int数据;
列出儿童;
公共节点(int数据,列表子节点){
这个数据=数据;
这个孩子=孩子;
}
@凌驾
公共字符串toString(){
返回数据+“”;
}
}
/*只有当类是公共的时,类的名称才必须是“Main”*/
表意文字
{
公共静态void main(字符串[]args)引发java.lang.Exception
{
List obj1=新链接列表();
obj1.add(新节点(10,Arrays.asList)(新节点(4,null),新节点(20,Arrays.asList)(新节点(2,null)),
新节点(13,Arrays.asList)(新节点(16,Arrays.asList)(新节点(3,null‘‘‘‘‘))));
obj1.add(新节点(5,空));
obj1.add(新节点(12,空));
obj1.add(新节点7,Arrays.asList)(新节点17,Arrays.asList)(新节点9,Arrays.asList)(新节点19,null),
新节点(15,null)),新节点(8,null))
),新节点(6,空))
));
obj1.add(新节点(11,空));
int tail=obj1.size();
对于(inti=0;i我解决了这个问题,这里是代码
import java.util.*;
import java.lang.*;
import java.io.*;
class Node {
int data;
List<Node> child;
public Node(int data, List<Node> child) {
this.data = data;
this.child = child;
}
@Override
public String toString() {
return data+" ";
}
}
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
List<Node> obj1 = new LinkedList<Node>();
obj1.add(new Node(10, Arrays.asList(new Node(4,null),new Node(20,Arrays.asList(new Node(2, null))),
new Node(13,Arrays.asList(new Node(16, Arrays.asList(new Node(3, null))))) )));
obj1.add(new Node(5, null));
obj1.add(new Node(12,null));
obj1.add(new Node(7,Arrays.asList(new Node(17, Arrays.asList(new Node(9, Arrays.asList(new Node(19, null),
new Node(15, null))),new Node(8, null))
),new Node(6, null))
));
obj1.add(new Node(11,null));
int tail=obj1.size();
for(int i=0;i<tail;i++)
{
Node n=obj1.get(i);
if(n.child!=null)
{
for(Node o:n.child)
{
obj1.add(tail, o);
tail++;
}
n.child=null;
}
}
System.out.println(obj1);
}
}
import java.util.*;
导入java.lang.*;
导入java.io.*;
类节点{
int数据;
列出儿童;
公共节点(int数据,列表子节点){
这个数据=数据;
这个孩子=孩子;
}
@凌驾
公共字符串toString(){
返回数据+“”;
}
}
/*只有当类是公共的时,类的名称才必须是“Main”*/
表意文字
{
公共静态void main(字符串[]args)引发java.lang.Exception
{
List obj1=新链接列表();
obj1.add(新节点(10,Arrays.asList)(新节点(4,null),新节点(20,Arrays.asList)(新节点(2,null)),
新节点(13,Arrays.asList)(新节点(16,Arrays.asList)(新节点(3,null‘‘‘‘‘))));
obj1.add(新节点(5,空));
obj1.add(新节点(12,空));
obj1.add(新节点7,Arrays.asList)(新节点17,Arrays.asList)(新节点9,Arrays.asList)(新节点19,null),
新节点(15,null)),新节点(8,null))
),新节点(6,空))
));
obj1.add(新节点(11,空));
int tail=obj1.size();
对于(int i=0;iI获得了输出,但我对存储节点的方式不满意。例如,我无法指定给定节点的子节点。正如链接的页面所示,您需要为节点创建一个类。您正在反向执行任务。您不希望展平数据结构,而是希望从一个列表。这是不可能的。使用LinkedList
与该链接页面的“多级链接列表”没有任何关系。您的代码与没有语义差异,例如list obj=Arrays.asList(Arrays.asList(10,5,12,7,11),Arrays.asList(4,20,13,17,6),Arrays.asList(2,16,9,8),Arrays.asList(3,19,15));
@Federico Peralta Schaffner我现在创建了一个类,有人能帮我修改列表吗?我得到了输出,但我对存储节点的方式不满意。例如,我无法指定给定节点的子节点。您需要为节点创建一个类,如您链接的页面中所示。您正在反转任务。您不希望扁平化数据结构,而是希望从列表列表中创建结构。这是不可能的。使用LinkedList
与该链接页面的“多级链接列表”无关。您的代码与没有语义差异,例如list obj=Arrays.asList(Arrays.asList(10,5,12,7,11),Arrays.asList(4,20,13,17,6),Arrays.asList(2,16,9,8),Arrays.asList(3,19,15));
@Federico Peralta Schaffner我现在创建了一个类,有人能帮我修改列表吗