更改 linkedList 中的元素位置
change element position in linkedList
我知道我们可以通过创建新节点和使用节点引用来更改元素位置。如何在不创建或删除节点的情况下更改元素位置,仅通过使用节点引用?非常感谢!
public class LinkedList<E extends Comparable<E>> implements Iterable<E>
{
private Node head; // reference to the first node
private int N; // number of elements stored in the list
private class Node
{
public E item;
public Node next;
public Node()
{
item = null; next = null;
}
public Node(E e, Node ptr)
{
item = e; next = ptr;
}
}
public boolean Move(E e){
Node current=head;
while(current !=null){
if(e.equals(current.item)){
System.out.println("True");
return true;
*****Then how to move this node to the front? Without creating and deleting nodes******
}
current=current.next;
}
System.out.println("False");
return false;
你的算法应该是这样的
int count = 1; // change to 0 if zero-indexed
Node p = null; // previous
Node n = head; // current
while(count < k) {
if(n.next != null) {
p = n;
n = n.next;
count++;
} else
break;
}
if(count == k){
p.next = n.next;
n.next = head;
head = n;
}
public void changeOrder(){
//keep the pointer to next element of the first
ListNode current=front.next;
//make first point to the next element
first.next=current.next;
current.next=first;
first=current;
//the current one was moved one step back and it points to first.
//change the position
current=current.next;
while(current.next!=null && current.next.next!=null){
ListNode temp = current.next.next;
current.next.next=temp.next;
temp.next=current.next;
current.next=temp;
current=temp.next;
}
}
我知道我们可以通过创建新节点和使用节点引用来更改元素位置。如何在不创建或删除节点的情况下更改元素位置,仅通过使用节点引用?非常感谢!
public class LinkedList<E extends Comparable<E>> implements Iterable<E>
{
private Node head; // reference to the first node
private int N; // number of elements stored in the list
private class Node
{
public E item;
public Node next;
public Node()
{
item = null; next = null;
}
public Node(E e, Node ptr)
{
item = e; next = ptr;
}
}
public boolean Move(E e){
Node current=head;
while(current !=null){
if(e.equals(current.item)){
System.out.println("True");
return true;
*****Then how to move this node to the front? Without creating and deleting nodes******
}
current=current.next;
}
System.out.println("False");
return false;
你的算法应该是这样的
int count = 1; // change to 0 if zero-indexed
Node p = null; // previous
Node n = head; // current
while(count < k) {
if(n.next != null) {
p = n;
n = n.next;
count++;
} else
break;
}
if(count == k){
p.next = n.next;
n.next = head;
head = n;
}
public void changeOrder(){
//keep the pointer to next element of the first
ListNode current=front.next;
//make first point to the next element
first.next=current.next;
current.next=first;
first=current;
//the current one was moved one step back and it points to first.
//change the position
current=current.next;
while(current.next!=null && current.next.next!=null){
ListNode temp = current.next.next;
current.next.next=temp.next;
temp.next=current.next;
current.next=temp;
current=temp.next;
}
}