ich eine Aufgabe gegeben hat, wird die folgende Methode in Java zu implementieren: SUBLIST (S, L) liefert true, wenn die Liste S ist eine Unterliste der Liste L.einzeln verknüpfte Liste in Java-Implementierung
ich verwenden müssen Die folgende Notation, wenn ich Listen als abstraktes Objekt in den Wiederholungsbeziehungen verarbeite. Wenn wir eine Liste L geben, schreiben wir L = [H | R], wobei H der Kopf der Liste und R der Rest der Liste ist. Für eine leere Liste L schreiben wir L = []. Zum Beispiel, wenn L = [1, 2, 3, 4, 5], H = 1 und R = [2, 3, 4, 5].
Daher meine Aufgaben sind:
a) die Rekurrenzrelationen für SUBLIST (S, L) unter Verwendung der obigen Liste Notation sorgen.
b) Implementieren Sie den rekursiven Algorithmus in Java unter Verwendung der Wiederholungsrelationen.
Jetzt für anderthalb Tage bei dieser Aufgabe bleiben und immer noch Schwierigkeiten dabei haben. Schätze, wenn mir jemand helfen kann, dieses Problem zu lösen.
Dies ist der Java-Code, mit dem ich arbeiten darf.
class SLLNode {
public Object info; // This is the data
public SLLNode next; // this is the address of the next node
public SLLNode() { // Here's how we construct an empty list.
next = null;
}
public SLLNode(Object el) {
info = el; next = null;
}
public SLLNode(Object el, SLLNode ptr) {
info = el; next = ptr;
}
}
class SLList {
protected SLLNode head = null;
public SLList() {
}
public void setToNull() {
head = null;
}
public boolean isEmpty() {
return head == null;
}
public Object first() {
return head.info;
}
public SLLNode head() {
return head;
}
public void printAll() {
for (SLLNode tmp = head; tmp != null; tmp = tmp.next)
System.out.print(tmp.info.toString());
}
public void add(Object el) {
head= new SLLNode(el,head);
}
public Object find(Object el) {
SLLNode tmp = head;
for (; tmp != null && !el.equals(tmp.info); tmp = tmp.next);
if (tmp == null)
return null;
else return tmp.info;
}
public boolean member(Object el) {
SLLNode tmp = head;
for (; tmp != null && !el.equals(tmp.info); tmp = tmp.next);
if (tmp == null)
return false;
else return true;
}
public Object deleteHead() { // remove the head and return its info;
Object el = head.info;
head = head.next;
return el;
}
public void delete(Object el) { // find and remove el;
if (head != null) // if non-empty list;
if (el.equals(head.info)) // if head needs to be removed;
head = head.next;
else {
SLLNode pred = head, tmp = head.next;
for (; tmp != null && !(tmp.info.equals(el));
pred = pred.next, tmp = tmp.next);
if (tmp != null) // if found
pred.next = tmp.next;
}
}
}
Mögliche Duplikate von [Singlelinked List-Klasse in Java] (http://stackoverflow.com/questions/36244871/singly-linked-list-class-in-java) – Valentin
Sie sollten Ihre [ursprüngliche Frage] (http : //stackoverflow.com/questions/36244871/singly-linked-list-class-in-java) anstatt ein Duplikat zu erstellen. – Valentin
Hinweis: Definieren Sie eine 'startsWith' Relation und verwenden Sie diese für jede mögliche Startposition. – fabian