以下删除方法逻辑有什么问题?为什么删除后我没有得到正确的输出。
import java.util.Scanner;
//Node Class
class Node1 {
int data;
Node1 Next;
Node1(int data) {
this.data = data;
Next = null;
}
}
//Main Class
public class LinkedListInsert {
//Inserting node in LinkedList
public static Node1 insert(Node1 head, int data) {
Node1 p = new Node1(data);
if (head == null)
head = p;
else {
Node1 start = head;
while (start.Next != null)
start = start.Next;
start.Next = p;
}
return head;
}
//Deleting node from LinkedList
public static Node1 delete(Node1 head, int d) {
Node1 start = head;
while (start.data != d) {
start = start.Next;
}
while (start.Next != null) {
start.data = start.Next.data;
start = start.Next;
}
start = null;
return head;
}
//Displaying Linked List
public static void display(Node1 head) {
Node1 start = head;
while (start != null) {
System.out.print(start.data + " ");
start = start.Next;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n;
Node1 head = null;
System.out.println("Enter the numbers of node to be inserted");
n = sc.nextInt();
while (n--> 0) {
System.out.println("enter node");
head = insert(head, sc.nextInt());
}
System.out.println("Before Deletion");
display(head);
delete(head, 3);//I have hard coded the deleting node as 3
System.out.println();
System.out.println("After Deletion");
display(head);
}
}
输入: 6 2 3 1 8
要删除的节点:3
输出:
删除前
6 2 3 1 8
删除后
6 2 1 8 8
正如您所看到的,节点3已从列表中删除,但是8将进入2次。 //我已将删除节点硬编码为3
答案 0 :(得分:1)
由于delete()中存在错误,您实际上并没有删除任何节点,因此您只更改了要删除的节点的值以及所有节点'值到下一个节点。这是一个修改过的代码,你可以使用delete2()来测试:
whoami
答案 1 :(得分:0)
可以使用下面的代码显示链表的值。
public void display(){
LinkedNode currNode =head;
while(true){
if(currNode == null){
break;
}
System.out.println("Iterating a LinkedList=-=-=-=>"+currNode.val);
currNode = currNode.nxt;
}
}
答案 2 :(得分:0)
请正确格式化源代码。
我刚刚浏览了您提供的代码。在删除之前,您首先插入节点,然后删除。当然,该列表还会显示当您询问“输入节点”时通过插入添加的内容。
请验证相同。
我刚试过同样的事。一旦我给出了输入 6 2 3 1 8
然后它要求进入节点,我添加了9 我再次添加了0
然后我得到了以下输出:
删除前 2 3 1 8 9 0 删除后 2 1 8 9 0 0
因此它从LinkedList中删除了6。