单向链表删除节点怎么获得上一个节点
public class Node{private Object obj;
private Node next;
}
现有ABCDE 5个节点,分别指向下一个节点:A->B->C->D->E
比如我想删除C,就得做类似的操作
B.next = B.next.next;
C.next = null;
假如我迭代到了 C 节点
怎么获得 B 节点?
有一种不需要B节点的方法:通过C拿到D节点,再将D节点的所有值覆盖到C节点。最后让D节点的next为null。但是如果节点中的内容比较多,覆盖过程就比较繁琐。。。。。
就像这样C.a = D.a; C.b = D.b;C.c = D.c;.......................................C.next = D.next; D.next = null; 本帖最后由 jackz007 于 2019-5-31 14:39 编辑
没有任何办法,对于单向链表来说,最要紧的就是在任何情况下都不能把首节点弄丢!否则的话,可以考虑双向链表,或者闭环链表(首尾相连的单向链表)。这样的话,只要有任何的一个节点在握,就可以遍历整个链表。 jackz007 发表于 2019-5-31 14:34
没有任何办法,对于单向链表来说,最要紧的就是在任何情况下都不能把首节点弄丢!否则的话,可以考 ...
那一般删除单向链表中的某一个节点时,是怎么做的?该不会是用下一节点覆盖吧。。 当然是得找到它的前一个节点。 jackz007 发表于 2019-5-31 15:38
当然是得找到它的前一个节点。
。。。。我就是问怎么得到前一个节点。。。就像我的问题那样,假如我得到了C节点,怎么拿到B节点。。
大佬你之前不是说:没有任何办法嘛。。。 本帖最后由 jackz007 于 2019-5-31 16:33 编辑
是啊,你得从头节点开始逐节点向后摸,当下一个节点就是 C 的时候,B 节点就算是找到了。 从头结点开始,一个一个往下找,指向C数据域的就是B节点了
jackz007 发表于 2019-5-31 16:32
是啊,你得从头节点开始逐节点向后摸,当下一个节点就是 C 的时候,B 节点就算是找到了。
我还是直接贴的例子吧
public void remove(Object e) {//假如 e 是节点C中的值
Node temp = first;//这是首节点
while(temp.next != null) {
if(temp.element.equals(e)) {//按照你的说法这里难道写temp.next.element.equals(e)
//这里怎么拿到上一个节点?
//假设这里temp就是C节点,怎么把C删除了?
}
temp = temp.next;
}
}
感觉如果这样写:temp.next = temp.next.next;太容易空指针了。。 本帖最后由 jackz007 于 2019-5-31 18:02 编辑
if first . element . equals(e) {
temp = first ;
first = first . next ;
break ;
} else {
if temp . next . element . equals(e) {
temp . next = temp . next . next ;
temp = temp . next ;
break ;
}
}
}
. . . . . .
free(temp) ; jackz007 发表于 2019-5-31 17:55
if first . element . equals(e) {
temp = first ;
...
。。。。你认真的吗。。。{:10_277:} 难道有什么问题? 用双指针
页:
[1]