这是作业,但请知道我在网上寻求帮助(例如http://www.sethi.org/classes/class_stuff/cis435/others/notes-java/data/collections/lists/simple-linked-list.html)和我的教科书,但我仍有一些问题。
任何帮助将不胜感激......
现在我正试图插入值,但没有任何工作。它是第一个项目,是否被添加为最后一个项目,或者介于两者之间。
Node header = null; // First element of list.
Node back = null; // Last element of list.
public void insert(int i, double value){ //insert value before i-th element
Node e = new Node();
e.num = value;
Node curr = header;
for(int x=0;x<i;x++) {
if (i == 1) { //we want to insert as first thing
if (size == 0) { //its the FIRST time we add something
header.next = e;
e.next = back;
break;
} else if (size == 1){
e.next = header.next; //i.e. the second thing in the list
header.next = e;
break;
} else {
e.next = header.next.next; //i.e. the second thing in the list
header.next = e;
break;
}
}
else if (x == (i-1)) {
e.next = curr.next;
curr.next = e;
break;
}
curr = curr.next;
}
size = size+1;
}
不确定为什么它不起作用。
谢谢!
答案 0 :(得分:3)
出于某种原因,仍在学习编程的人会使事情变得复杂得多。我在学习java时就这样做了,当我刚学习一门新语言的时候我仍然这样做,而且我已经标记过的学生会找到新的和令人惊奇的方法来实现它。你在插入中有更多的东西,然后需要有,例如,在特定索引处插入值的方法不应该检查它是否是要插入的第一个项目(不是说它不应该检查边界)。这是我要做的伪代码。
insert(index, value)
if index>size
throw null pointer
traverse to index -1 //lets call this nodeI
create newnode and set value
set newnode.next to nodeI.next
set nodeI.next to newnode
increase size.
为你提供了一些方便的提示,你应该有一个函数从链接列表中获取一个元素,返回一个节点?例如,public node elementAt(int index)?用它来遍历链表。如果要附加到链接列表,请尝试此
append(value)
insert(size-1,value)
如果你想在开头插入?同样的想法
insert(value)
insert(0,value)
答案 1 :(得分:1)
一些建议:
在考虑“插入i”之前,先从“插入结尾”开始。
答案 2 :(得分:1)
e.next = header.next.next
行中如果header.next
指向'null'会发生什么?是否有可能到达那里?