Löschen eines Knotens aus einer Liste
Mein problem: mein Knoten löschen Methode funktioniert gut für das löschen jeder angegebenen Knoten von einem Benutzer erstellte Liste außer dem ersten element. Wie bekomme ich diese Methode zu löschen, die vor einer Liste?
public void deleteNode(node spot, node front) {
node current = spot, previous = front;
while(previous.next != current) {
previous = previous.next;
}
previous.next = current.next;
}
Dies ist das volle Programm-code.
import java.io.*;
public class LinkedList {
public int num;
public node front;
//set front to null
public void init() {
front = null;
}
//make a new node
public node makeNode(int num) {
node newNode = new node();
newNode.data = num;
newNode.next = null;
return newNode;
}
//find the end of a list
public node findTail(node front) {
node current = front;
while(current.next != null) {
current = current.next;
}
return current;
}
//find a specified node
public node findSpot(node front, int num) {
node current = front;
boolean searching = true, found = false;
while((searching)&&(!found)) {
if(current == null) {
searching = false;
}
else if(current.data == num) {
found = true;
}
else {
current = current.next;
}
}
return current;
}
//delete a specified node
public void deleteNode(node spot, node front) {
node current = spot, previous = front;
while(previous.next != current) {
previous = previous.next;
}
previous.next = current.next;
}
//add nodes to the end of a list
public void add2Back(node front, int num) {
node tail;
if (front == null) {
front = makeNode(num);
}
else {
tail = findTail(front);
tail.next = makeNode(num);
}
}
//add nodes after a specified node
public void addAfter(int num, node spot) {
node newNode;
newNode = makeNode(num);
newNode.next = spot.next;
spot.next = newNode;
}
//print out a list
public void showList(node front) {
node current = front;
while(current != null){
System.out.println(current.data);
current = current.next;
}
}
public static void main(String [] args) throws IOException{
//make a new list and node
LinkedList newList = new LinkedList();
node newNode = new node();
//add data to the nodes in the list
for(int j = 1; j < 10; j++){
newList.add2Back(newNode, j);
}
//print out the list of nodes
System.out.println("Auto-generated node list");
newList.showList(newNode);
//ask the user how many nodes to make, make those nodes, and show them
System.out.println("Please enter how many nodes you would like made.");
BufferedReader inputReader = new BufferedReader(new InputStreamReader(System.in)) ;
String inputData = inputReader.readLine();
int listLength = Integer.parseInt(inputData);
LinkedList userList = new LinkedList();
node userNode = new node();
for(int j = 1; j < listLength; j++) {
userList.add2Back(userNode, j);
}
userList.showList(userNode);
//ask the user to add a new node to the list after a specified node
System.out.println("Please enter a number for a node and then choose a spot from the list to add after.");
BufferedReader inputReader2 = new BufferedReader(new InputStreamReader(System.in)) ;
String inputData2 = inputReader2.readLine();
BufferedReader inputReader3 = new BufferedReader(new InputStreamReader(System.in)) ;
String inputData3 = inputReader3.readLine();
int newNodeValue = Integer.parseInt(inputData2);
int nodeInList = Integer.parseInt(inputData3);
userList.addAfter(newNodeValue, userList.findSpot(userNode, nodeInList));
userList.showList(userNode);
//ask the user to delete a specified node
System.out.println("Please enter a node to delete.");
BufferedReader inputReader4 = new BufferedReader(new InputStreamReader(System.in)) ;
String inputData4 = inputReader4.readLine();
int nodeToDelete = Integer.parseInt(inputData4);
userList.deleteNode(userList.findSpot(userNode, nodeToDelete), userNode);
userList.showList(userNode);
}
}
if (previous == front) front=Strom.neben anderen vorherigen.nächsten=aktuellen.weiter
Die Benennung einer Klasse
Die Benennung einer Klasse
node
ist sehr verwirrend für java-Programmierer. Die Konvention ist: - Typ-Namen (außer "primitive") beginnen mit einem Großbuchstaben. Also die Klasse sollte benannt werden Node
.
InformationsquelleAutor user1751234 | 2012-10-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, dass Ihr
deleteNode
ändert nicht diefront
member-variable der Liste, weil diefront
variable innerhalbdeleteNode
ist eine Methode, parameter, nicht die Instanz-variablefront
.Hier ist, was Sie tun müssen:
front
als öffentliche member derLinkedList
ist eine Verletzung der Kapselung. Machenfront
eine private variable.front
von allen Methoden, nehmen Sie es; verwenden die privaten memberfront
statt.deleteNode
um zu sehen, ob der spot gelöscht werden, wird diefront
. Wenn es ist, führen Sie eine spezielle operation, weistfront
einen neuen Wert ein und beenden; andernfalls führen Sie diewhile
Schleife, die Sie bereits haben.InformationsquelleAutor dasblinkenlight
beginnen Sie, zu überprüfen, die
front.next
. Sofront
selbst wird ignoriert, jedes mal.front = null
- und Rücksendung hat keine Auswirkungen. sollten Siethis.front = this.front.next
oder so ähnlich.InformationsquelleAutor taufique
InformationsquelleAutor Lal Zada
linklist delete-Methode....
InformationsquelleAutor shwan