我对Java非常陌生,我得到了这个linkedList设置,我需要使用递归或while循环来编写返回Linkedlist大小的大小函数。当这个链接列表设置没有初始化Node、head等时,我想我很困惑如何执行size函数。
package list;
public class LinkedList {
public int value;
public LinkedList next;
public LinkedList (int value, LinkedList next) {
this.value = value;
this.next = next;
}
public static LinkedList list () {
return new LinkedList(1, new LinkedList(2, new LinkedList(3, null)));
}
public int size () {
int size = 0;
Node Current = head;
while(Current.next != null)
{
Current = Current.next;
size++;
}
return size;
}
}发布于 2015-07-21 22:04:01
在当前的公式中,LinkedList实例实际上是节点和列表。没关系,但这意味着名单上没有什么特别的“头”.
在这种情况下,解决办法是改变:
Node Current = head;至
LinkedList current = this;(是的,size变量应该以1开头。在这个公式中,空列表由null表示。如果要对size()实例调用LinkedList,则列表的大小必须至少为1)。
@Konrad声明:“列表本身应该封装节点。
事实上,这是一个设计上的选择。如果你遵循的是面向对象的设计原则,那么它应该。然而,在某些情况下,从务实的角度来看,您不希望这样做。有时,为了获得更好的性能或降低内存利用率,有必要“牺牲”抽象。
发布于 2015-07-21 22:06:22
在链接列表中计算大小的另一种方法是使用递归。只有两起案件:
1 --只是它本身1加上next的大小。因此,我们有以下功能:
public int size(){
if(next == null){
return 1;
} else {
return 1 + next.size();
}
}这可以用三元操作符写得非常简洁:
public int size(){
return next != null ? 1 + next.size() : 1;
}对于迭代解决方案,不需要使用Node类,因为每个LinkedList对象既表示自身(一个值),也表示要遵循的所有值(值列表)。从这个角度来看,我们必须从“这里”循环,直到没有其他地方可去。
public int size () {
int size = 1;
LinkedList Current = this;
while(Current.next != null){
Current = Current.next;
size++;
}
return size;
}发布于 2015-07-21 22:04:36
public int size()
{
int size = 1;
LinkedList head = this;
while (head.next != null)
{
head = head.next;
size++;
}
return size;
}https://stackoverflow.com/questions/31550239
复制相似问题