Java 使用树集中的元素初始化链表
问题是: 定义一个构造函数,该构造函数将树集作为参数,并使用集合中的元素初始化链表。新列表必须按字典顺序递增排序 此方法将使用以下类实现:Java 使用树集中的元素初始化链表,java,linked-list,set,Java,Linked List,Set,问题是: 定义一个构造函数,该构造函数将树集作为参数,并使用集合中的元素初始化链表。新列表必须按字典顺序递增排序 此方法将使用以下类实现: public class LinkedList<T extends Comparable<T>> { private class Node{ private T data; private Node next; private Node(T data){
public class LinkedList<T extends Comparable<T>> {
private class Node{
private T data;
private Node next;
private Node(T data){
this.data = data;
next = null;
}
}
private Node head;
public LinkedList(){
head = null;
}
公共类链接列表{
私有类节点{
私有T数据;
私有节点下一步;
专用节点(T数据){
这个数据=数据;
next=null;
}
}
专用节点头;
公共链接列表(){
head=null;
}
现在我知道一个树集本质上是经过排序的,所以我在这里真正需要做的就是从树集中提取元素并将其放在这个链表的前面。但是我在从集合中检索元素并将其添加到LinkedList中时遇到了问题。我编写了一个私人帮助程序add(T data)方法,我正在使用它,但我不知道我是否应该这样做。我对数据结构不熟悉,所以对集合及其实现几乎一无所知
public class LinkedList<T extends Comparable<T>> {
private class Node{
private T data;
private Node next;
private Node(T data){
this.data = data;
next = null;
}
}
private Node head;
public LinkedList(){
head = null;
}
public void add(T data){
Node n = new Node(data);
if(head == null){
head = n;
}
else{
n.next = head;
head = n;
}
}
public LinkedList(TreeSet<T> test){
Iterator<T> itr = test.iterator();
while(itr.hasNext()){
this.add(itr.next());
}
}
公共类链接列表{
私有类节点{
私有T数据;
私有节点下一步;
专用节点(T数据){
这个数据=数据;
next=null;
}
}
专用节点头;
公共链接列表(){
head=null;
}
公共无效添加(T数据){
节点n=新节点(数据);
if(head==null){
水头=n;
}
否则{
n、 下一个=头部;
水头=n;
}
}
公共链接列表(树集测试){
迭代器itr=test.Iterator();
while(itr.hasNext()){
this.add(itr.next());
}
}
您必须解决的主要问题是,您需要将每个项目添加到列表的末尾,而不是开始
将节点添加到列表的开头很容易:
public void addToHead(T data) {
Node node = new Node(data);
node.next = head;
head = node;
}
添加到末尾比较困难,因为您没有对尾部的引用。但解决方案相当简单:在您正在开发的构造函数中,保留对列表尾部的引用,以便您可以在链接的末尾而不是开始处添加每个值。问题包括“增加字典顺序”
我的解决方案没有辅助方法:
public LinkedList(TreeSet<T> test){
Node currNode = null;
for(T data : test) {
Node newNode = new Node(data);
if(head == null) {
head = newNode;
currNode = head;
}
else {
currNode.next = newNode;
currNode = currNode.next;
}
}
}
公共链接列表(树集测试){
节点currNode=null;
对于(T数据:测试){
Node newNode=新节点(数据);
if(head==null){
头=新节点;
节点=头部;
}
否则{
currNode.next=newNode;
currNode=currNode.next;
}
}
}
这行得通吗?你应该有一个问题,而不仅仅是扔掉一堆代码然后说“那么,你觉得怎么样?”。我确实有点提到它行得通。我只是想看看是否有更好的方法来做这件事,或者这是“惯例”。我只是对它进行了调整。