10
votes

Élévateurs d'échange dans LinkedList

Je veux maintenir l'ordre des éléments ajoutés dans une liste. Donc, j'ai utilisé un linkedlist en Java.

Maintenant, je veux pouvoir échanger deux éléments dans la liste liée. Tout d'abord, je ne trouve pas de ellementat () pour linkedlist . En outre, il n'ya aucun moyen d'ajouter de l'élément à une position spécifiée.


0 commentaires

7 Réponses :


25
votes

Il y a un collections.swap (liste Liste, int i, int j) que vous pouvez utiliser pour échanger deux éléments d'une liste . Il y a aussi LinkedList. Obtenez (int index) et linkedlist.add (int index, e élément) (les deux sont des méthodes spécifiées par Liste d'interface ). Toutes ces opérations seront O (n) depuis un linkedlist ne implémente pas randomaccess .


0 commentaires

0
votes

Ajouter

Est-ce ce que vous voulez?

Si vous souhaitez conserver la liste dans un état de tri, pourquoi ne pas simplement insérer l'élément avec AddFirst

puis triez la liste en utilisant Collections.sort


0 commentaires



2
votes

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.


0 commentaires

1
votes
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;
    }
}
}

0 commentaires

0
votes
 // 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;
    }

0 commentaires