我想维护列表中添加元素的顺序。所以,我在Java中使用了LinkedList
。
现在我希望能够交换链表中的两个元素。首先,我找不到elementAt()
的{{1}}。此外,无法在指定位置添加元素。
答案 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)
答案 2 :(得分:2)
如果您正在为练习(即项目或学校)编写自己的LinkedList类,请尝试创建两个临时Object变量和两个整数以保持其在List中的位置。然后,使用add(int,Object)将第一个添加到第二个位置,第二个添加到第一个位置。
答案 3 :(得分:0)
答案 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
}