我是Java的新手,我得到了这个Linkedlist设置,我需要使用recursion或while循环来编写返回linkedList大小的size函数。我想当这个链表设置没有初始化Node,head等时,我对如何进行大小功能感到非常困惑。
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;
}
}
答案 0 :(得分:3)
在您当前的配方中,您的LinkedList
实例实际上是节点和列表。没关系,但这意味着没有尊贵的" head"列表...
在此上下文中,修复方法是更改:
Node Current = head;
到
LinkedList current = this;
(并且,是的,size
变量应该以{{1}}开头。在此公式中,空列表由1
表示。如果您正在调用null
size()
的实例,那么列表的大小必须至少为1.)
@Konrad陈述"列表本身应该封装节点。"
实际上这是一个设计选择。如果您遵循OO设计原则那么它应该。但是,在某些情况下,实际上您并不想这样做。有时候有必要牺牲"抽象以获得更好的性能或降低内存利用率。
答案 1 :(得分:2)
在链接列表中计算大小的另一种方法,例如您创建的链接列表,是使用递归。只有两种情况:
1
- 只是其本身1
加上下一个的大小。因此,我们有以下功能:
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
对象都表示自身(单个值)和所有要遵循的值(a价值清单)。从这个角度来看,我们必须从" here"直到没有其他地方可去。
public int size () {
int size = 1;
LinkedList Current = this;
while(Current.next != null){
Current = Current.next;
size++;
}
return size;
}
答案 2 :(得分:1)
$('input[type=checkbox]:checked').each(function() {
var $tr = $(this).closest('tr');
var del_id = $(this).closest('tr').attr('data-id');
$.each(del_arr, function(index, value ) {
if (value == del_id){
$tr.remove();
console.log('Removing :'+ del_id +' And ' + value);
return false;
}
});
})
答案 3 :(得分:0)
将其更改为:
public int size () {
int size = 0;
// set the head as current note
Node current = head;
// while a current node is set
while(current != null)
{
// increment site
size++;
// and set the next as current node
current = current.next;
}
return size;
}
列表本身不是列表。它是一个链接的节点列表。列表本身应该封装节点。