Поменяйте местами элементы в LinkedList

java linked-list swap

13126 просмотра

6 ответа

6023 Репутация автора

Я хочу поддерживать порядок элементов, добавляемых в список. Итак, я использовал LinkedListв Java.

Теперь я хочу поменять местами два элемента в связанном списке. Прежде всего, я не могу найти elementAt()для LinkedList. Кроме того, нет возможности добавить элемент в указанной позиции.

Автор: Boolean Источник Размещён: 15.05.2010 08:21

Ответы (6)


23 плюса

300214 Репутация автора

Решение

Существует, Collections.swap(List<?> list, int i, int j)что вы можете использовать для замены двух элементов List<?>. Там также LinkedList.get(int index)и LinkedList.add(int index, E element)(оба метода определены interface List). Все эти операции будут, O(N)поскольку LinkedListнет implements RandomAccess.

Автор: polygenelubricants Размещён: 15.05.2010 08:25

0 плюса

25261 Репутация автора

Добавлять

Это то, что вы хотите?

Если вы хотите сохранить список в отсортированном состоянии, почему бы просто не вставить элемент с помощью addfirst?

а затем сортировать список с помощью Collections.sort

Автор: helpermethod Размещён: 15.05.2010 08:28

2 плюса

15499 Репутация автора

Проверьте Javadocs для LinkedList

Чтобы найти элемент при indexиспользованииget(int index)

Поместить elementпри определенном indexиспользованииset(int index, Object element)

Автор: soldier.moth Размещён: 15.05.2010 08:29

0 плюса

17340 Репутация автора

Взгляните на ArrayList , этот класс будет поддерживать порядок вставки и обеспечивать O (1) произвольный доступ.

Автор: Vlad Gudim Размещён: 15.05.2010 08:38

2 плюса

21 Репутация автора

Если вы пишете свой собственный класс LinkedList для упражнений (то есть для проекта или школы), попробуйте создать две временные переменные объекта и два целых числа для сохранения их позиции в списке. Затем используйте add (int, Object), чтобы добавить первое во 2-й позиции, второе в 1-й позиции.

Автор: Nethageraba Размещён: 05.12.2012 01:08

0 плюса

21 Репутация автора

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

}

Автор: user3181496 Размещён: 02.12.2016 10:42
Вопросы из категории :
32x32