我正在尝试从链接列表中删除节点!我的链表中存储了以下数据。
aa 1 1 1 1
bb 2 2 2 2
cc 3 3 3 3
我正在使用Java代码而我的代码是
Node p=first;
for(Node c=first;c!=null;c=c.next){
if(c.data.startsWith(key)){
if(c.next==null){
}
else{
p=c;
}
if(c==first){
first=first.next;
}
else{
p.next=c.next;
}
}
}
我遇到的问题是此代码只能正确删除数据,即cc 3 3 3 3。我想知道我的代码中的问题是什么,以便我能够删除我想要删除的数据! 提前谢谢。
答案 0 :(得分:1)
你需要这个作为循环的最后一行:
p = c;
您还需要取消c.next == null
的测试。找到密钥后删除节点无关紧要。
整个循环应该是:
for(Node c = first, p = null; c != null; p = c, c = c.next){
if (c.data.startsWith(key)) {
if (p == null) {
first = c.next;
} else {
p.next = c.next;
}
break;
}
p = c;
}
答案 1 :(得分:0)
你不应该需要这段代码:
if(c==first){
first=first.next;
}
else{
p.next=c.next;
}
您的循环已经移动到下一个节点。此代码只会导致您跳过其他每个节点。也许这就是你找不到钥匙的原因。
答案 2 :(得分:0)
试试这样:
Node lastNode = null;
// Traverse all nodes in the list
for (Node node = first; node != null; node = node.next) {
// Check for node to delete
if (node.data.startsWith(key)) {
if (lastNode != null) {
// directly link last node with next node to remove node
lastNode.next = node.next;
} else {
// if the node to delete is the first node, update first node
first = node.next;
}
// remember last node
lastNode = node;
}
}