我已经编写了代码,从给定密钥的链表中删除了一个节点.但是,当我尝试删除此处的第一个节点然后遍历列表时,它仍显示先前存在的第一个节点.有人可以告诉我我在做什么错吗?我的整个代码都以类名开头
public class LinkedList {
//removing Node nested class
public void buildList1() {
head=new Node(1);
head.next=new Node(3);
head.next.next=new Node(5);
head.next.next.next=new Node(7);
}
public boolean removeNode(Node head,int x) {
//1 3 5 7---to delete 5
Node q=head;//q
// Node p=head.next;//p
Node prev=null;
if(q!=null && q.data==x) {
head=q.next;
//q=null;
System.out.println("next to head" + head.data);
return true;
}
while(q!=null && q.data!=x) {
prev=q;
q=q.next;
}
if(q==null)
return false;
prev.next=q.next;
return true;
}
public void printList()
{
Node tnode = head;
while (tnode != null)
{
System.out.print(tnode.data+" ");
tnode = tnode.next;
}
}
public static void main(String args[]) {
LinkedList list=new LinkedList();
list.buildList1();
list.printList();
System.out.println(list.removeNode(list.head, 1));
list.printList();
}
}
最佳答案
@JD D有一个很好的答案,但我会更轻松地执行removeNode方法.
public boolean removeNode(int x) {
tempNode = this.head;
prevNode = null;
if (this.head != null && this.head.data == x) {
this.head = this.head.next;
return true;
}
while (tempNode != null) {
if (tempNode.data == x) {
prevNode.next = tempNode.next;
return true;
}
prevNode = tempNode;
tempNode = tempNode.next;
}
return false;
}
本文探讨了在Java中实现链表删除特定节点时遇到的问题,特别是当试图删除链表的第一个节点时,代码未能正确更新头节点,导致遍历时仍然显示被删除的节点。文章详细展示了错误代码,并提供了一个修正后的removeNode方法实现。
997

被折叠的 条评论
为什么被折叠?



