在 LinkedList 的索引处插入
Insertion at index of LinkedList
您好,我有这个方法可以在 LinkedList 的任何索引处插入一个元素,但是,新元素没有显示在输出中,我错过了什么,谢谢!
我在下面展示了部分代码,非常感谢任何帮助!
public class LinkedList<E extends Comparable<E>> implements Iterable<E>
{
// instance data members of list
private Node head; // reference to the first node
private int N; // number of elements stored in the list
private class Node
{
// instance data members of Node
public E item;
public Node next;
// constructors for Node
public Node()
{
item = null; next = null;
}
public Node(E e, Node ptr)
{
item = e; next = ptr;
}
}// end class Node
public void insertAfter(int k, E e){
if (k < 0 || k >= size()){
throw new IndexOutOfBoundsException();}
Node temp=new Node();
temp.item=e;
int index=k-1;
Node current=head;
for (int i=0; i<=N; N++){
if (i==index){
temp.next=current.next;
current.next=temp;
}
}
++N;
}
看起来你正在递增一个实例变量N
试试这个
public void insertAfter(int k, E e){
if (k < 0 || k >= size()){
throw new IndexOutOfBoundsException();}
Node temp=new Node();
temp.item=e;
int index=k-1;
Node current=head;
for (int i=0; current != null && i<N; i++){
if (i==index){
temp.next=current.next;
current.next=temp;
} else {
current = current.next;
}
}
++N;
}
不要忘记,如果在位置 0 插入节点,则需要更新 head
引用的内容。
您没有在列表中移动当前元素。您循环整数索引但不将指针移动到当前节点。所以在循环中current永远是链表的头部。
你需要这样做:
for (int i=0; i<=N; N++)
if (i==index){
temp.next=current.next;
current.next=temp;
}else{
current=current.next;
}
这样当您添加元素时,您将处于正确的位置。否则你会把它插入到第一个位置。
您好,我有这个方法可以在 LinkedList 的任何索引处插入一个元素,但是,新元素没有显示在输出中,我错过了什么,谢谢! 我在下面展示了部分代码,非常感谢任何帮助!
public class LinkedList<E extends Comparable<E>> implements Iterable<E>
{
// instance data members of list
private Node head; // reference to the first node
private int N; // number of elements stored in the list
private class Node
{
// instance data members of Node
public E item;
public Node next;
// constructors for Node
public Node()
{
item = null; next = null;
}
public Node(E e, Node ptr)
{
item = e; next = ptr;
}
}// end class Node
public void insertAfter(int k, E e){
if (k < 0 || k >= size()){
throw new IndexOutOfBoundsException();}
Node temp=new Node();
temp.item=e;
int index=k-1;
Node current=head;
for (int i=0; i<=N; N++){
if (i==index){
temp.next=current.next;
current.next=temp;
}
}
++N;
}
看起来你正在递增一个实例变量N
试试这个
public void insertAfter(int k, E e){
if (k < 0 || k >= size()){
throw new IndexOutOfBoundsException();}
Node temp=new Node();
temp.item=e;
int index=k-1;
Node current=head;
for (int i=0; current != null && i<N; i++){
if (i==index){
temp.next=current.next;
current.next=temp;
} else {
current = current.next;
}
}
++N;
}
不要忘记,如果在位置 0 插入节点,则需要更新 head
引用的内容。
您没有在列表中移动当前元素。您循环整数索引但不将指针移动到当前节点。所以在循环中current永远是链表的头部。 你需要这样做:
for (int i=0; i<=N; N++)
if (i==index){
temp.next=current.next;
current.next=temp;
}else{
current=current.next;
}
这样当您添加元素时,您将处于正确的位置。否则你会把它插入到第一个位置。