Angenommen, ich habe eine verknüpfte Liste wie 1 -> 2 -> 3 -> 4 -> 5
. Ich möchte m
th Element und von m+1
th bis zum Ende dieses verketteten Liste von dem ersten Element trennen, so dass für m=2
wir 1 -> 2
und 3 -> 4 -> 5
, so etwas wie dieses haben würde:Aufteilen einer LinkedList
private ListNode split(ListNode head, int m) {
ListNode h1 = new ListNode(0);
ListNode h2 = new ListNode(0);
h1.next = head;
h2.next = head; // same reference: error!
ListNode cur1 = h1;
ListNode cur2 = h2;
for (int i = 0; i < m; i++) {
cur1 = cur1.next;
}
cur1.next = null;
ListNode tmp = cur2.next;
for (int i = 0; i < m; i++) {
tmp = tmp.next;
}
cur2.next = tmp;
// doesn't matter which one to return
return h2.next;
}
Ich weiß, das funktioniert nicht, weil ich die gleiche Referenz (head
) für meine h2
benutze und ich muss eine Kopie des Kopfes machen (h2.next = copyOfHead
), aber ich frage mich, ob es eine bessere, effizientere Lösung gibt, ohne eine Kopie davon zu machen Kopf.
Sprache? ... C#? – phonetagger
@phonetagger C#, Java, spielt keine Rolle – Yar
Für den Anfang denke ich, du willst 'Listnode h1 = head; Listnode h2 = head; 'und nicht die ersten vier Zeilen, die Sie gerade haben. –