2010-05-15 4 views
6

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

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

ответ

22

Существует 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.

+2

+1 За указание на то, что операции имеют O (N). – helpermethod

0

add

это то, что вы хотите ли?

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

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

2

Отъезд Javadocs для LinkedList

К найти элемент на уровне indexget(int index)

Чтобы разместить element в определенном indexset(int index, Object element)

0

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

2

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

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

}

Смежные вопросы