【发布时间】:2015-07-27 23:22:48
【问题描述】:
伙计们,我无法从 LinkedList 中删除指定的 Link。例如,如果我有:
"A" --> "B" --> "C"
并且想删除Link "B",所以结果是:
"A" --> "C"
我在获取以前的Link "A" 和引用"C" 时遇到了麻烦。谁能帮我解决这个问题?方法是:
public void delete(String data){
if(isEmpty()){
System.out.println("The list is empty!");
System.exit(0);
}
else{
Link current = firstLink;
Link previous = firstLink;
while(current != null){
if(current.getData().equals(data)){
previous = current.getNext();
}
else{
previous = current;
current = current.getNext();
}
}
}
}
班级Link
package LinkedList;
public class Link{
private String data;
private Link next;
public Link(String data){
this.data = data;
}
public void display(){
System.out.println(data);
}
public String getData(){
return this.data;
}
public Link getNext(){
return this.next;
}
}
class LinkedList{
private Link firstLink;
public LinkedList(){
this.firstLink = null;
}
public boolean isEmpty(){
return (this.firstLink == null);
}
public void insert(String data){
Link newLink = new Link(data);
Link newLinkNext = newLink.getNext();
newLinkNext = firstLink;
firstLink = newLink;
}
public Link deleteFirst(){
if(isEmpty()){
return null;
}
else {
Link deletedOne = this.firstLink;
Link nextLink = firstLink.getNext();
firstLink = nextLink;
return deletedOne;
}
}
public void delete(String data){
if(isEmpty()){
System.out.println("The list is empty!");
System.exit(0);
}
else{
Link current = firstLink;
Link previous = firstLink;
while(current != null){
if(current.getData().equals(data)){
previous = current.getNext();
}
else{
previous = current;
current = current.getNext();
}
}
}
}
【问题讨论】:
-
我什至没有看到任何将 A 加入 C 的尝试。您需要知道 B 之前的节点,以便您可以使 B 之前的节点指向 B 之后的节点...
-
@John3136,这是我的问题,我应该如何在
"B"之前获得节点? -
您有一个
while循环 - 为什么每次循环时不记住前一个值? -
@John3136,我已经更新了代码。尚未测试,但将在几秒钟内完成
-
应该是
previous.next = current.getNext()而不是previous = current.getNext()。可能应该检查current == firstLink并适当处理。
标签: java linked-list nodes