Je veux maintenir l'ordre des éléments ajoutés dans une liste. Donc, j'ai utilisé un Maintenant, je veux pouvoir échanger deux éléments dans la liste liée. Tout d'abord, je ne trouve pas de linkedlist code> en Java. P>
ellementat () code> pour
linkedlist code>. En outre, il n'ya aucun moyen d'ajouter de l'élément à une position spécifiée. P>
7 Réponses :
Il y a un collections.swap (liste > Liste, int i, int j) code>
que vous pouvez utiliser pour échanger deux éléments d'une liste > code>. Il y a aussi
LinkedList. Obtenez (int index) code>
et linkedlist.add (int index, e élément) code>
(les deux sont des méthodes spécifiées par Liste d'interface code>
). Toutes ces opérations seront O (n) code> depuis un
linkedlist code> ne
implémente pas randomaccess code>. P>
Ajouter P>
Est-ce ce que vous voulez? P>
Si vous souhaitez conserver la liste dans un état de tri, pourquoi ne pas simplement insérer l'élément avec AddFirst P>
puis triez la liste en utilisant Collections.sort p>
Jetez un coup d'œil à ArrayList A>, cette classe gérera tous les deux l'ordre d'insertion et fournira O (1) accès aléatoire. P>
Si vous écrivez votre propre catégorie LinkedList pour l'exercice (c'est-à-dire pour un projet ou une école), essayez de faire deux variables d'objet temporaire et deux INT pour contenir leur position dans la liste. Ensuite, utilisez Ajouter (int, objet) pour ajouter la première dans la 2ème position, deuxième dans la 1ère position. p>
public class SwapNode { public static Node head; public static void main(String[] args) { SwapNode obj = new SwapNode(); obj.insertAtEnd(5); obj.insertAtEnd(6); obj.insertAtEnd(4); obj.insertAtEnd(7); obj.insertAtEnd(3); obj.insertAtEnd(8); obj.insertAtEnd(2); obj.insertAtEnd(9); obj.insertAtEnd(1); obj.print(head); System.out.println("*** Swapped ***"); obj.swapElementValue(4, 2); } public void swapElementValue(int value1, int value2) { if (value1 == value2) { System.out.println("Values same, so no need to swap"); return; } boolean found1 = false, found2 = false; Node node = head; while (node != null && !(found1 && found2)) { if (node.data == value1) { node.data = value2; found1 = true; node = node.next; continue; } if (node.data == value2) { node.data = value1; found2 = true; node = node.next; continue; } node = node.next; } if (found1 && found2) { print(head); } else { System.out.println("Values not found"); } } public void insertAtEnd(int data) { Node newNode = new Node(data); if (head == null) { head = newNode; return; } Node temp = head; while (temp.next != null) { temp = temp.next; } temp.next = newNode; } public void print(Node head) { Node temp = head; while(temp != null) { System.out.print(temp.data); temp = temp.next; } System.out.println(); } static class Node { private int data; public Node next; public Node(int data) { this.data = data; } } }
// I tried to reduce time complexity here, in 3 while loops (get() and set() use 4 while loop) void swapAt(int index1, int index2){ // swapping at index Node tmp = head; int count=0; int min, max; // for future reference to reduce time complexity if(index1<index2){ min = index1; max = index2; } else{ min = index2; max = index1; } int diff = max - min; while(min!=count){ tmp= tmp.next; count++; } int minValue = tmp.data; while(max!=count){ tmp= tmp.next; count++; } int maxValue = tmp.data; tmp.data = minValue; tmp = head; count =0; while(min!=count){ tmp= tmp.next; count++; } tmp.data = maxValue; }