在LinkedList中交换元素

时间:2010-05-15 08:21:37

标签: java linked-list swap

我想维护列表中添加元素的顺序。所以,我在Java中使用了LinkedList

现在我希望能够交换链表中的两个元素。首先,我找不到elementAt()的{​​{1}}。此外,无法在指定位置添加元素。

7 个答案:

答案 0 :(得分:23)

您可以使用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

答案 1 :(得分:2)

查看LinkedList

的Javadoc

要使用index使用get(int index)

查找元素

element使用index使用set(int index, Object element)

答案 2 :(得分:2)

如果您正在为练习(即项目或学校)编写自己的LinkedList类,请尝试创建两个临时Object变量和两个整数以保持其在List中的位置。然后,使用add(int,Object)将第一个添加到第二个位置,第二个添加到第一个位置。

答案 3 :(得分:0)

add

这是你想要的吗?

如果您希望将列表保持在排序状态,为什么不只是插入带有addfirst的元素

然后使用Collections.sort

对列表进行排序

答案 4 :(得分:0)

看一下ArrayList,这个类将保持插入顺序并提供O(1)随机访问。

答案 5 :(得分: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;
    }
}

}

答案 6 :(得分:0)

if ($isThereSomethingToEmail) {
    # finish the splat and send the email
}