我想尝试在节点的某个位置添加一个字符串。出于某种原因,当我尝试在某个位置输入新字符串时,它会删除列表中已有的所有现有数据。我不确定是什么问题。
public void insertAt(String data, int pos)
{
if(head == null)
insertAtStart(data);
else if(pos < 1 || pos > size)
System.out.println("Position Out Of Bounds");
Node current = head;
int i = 1;
while(i < pos)
{
current = current.next;
i++;
}
if(current.prev == null)
{
Node newLink = new Node(data);
current.prev = newLink;
head = newLink;
}
else
{
Node newLink = new Node(data);
current.prev.next = newLink;
current.prev = newLink;
}
size++;
}
答案 0 :(得分:0)
您未设置newLink.prev
和newLink.next
。这导致链表中间链接断开。
在头部案例(current.prev == null
)中,在覆盖head
之前:
newLink.next = head;
在常见情况下,在覆盖current.prev
;
newLink.prev = current.prev;
newLink.next = current;
答案 1 :(得分:0)
请考虑以下几点
每个案例都有独特的处理方式
案例1
if( current == head ) // sure its the head but..
{
if( head.next != null ) // is the list NOT EMPTY?
{
newLink.next = head;
head = newLink;
}
else // list is empty
{
head = newLink;
}
}
对于案例2,当前位于中间位置
current.prev.next = newLink;
newLink.prev = current.prev.next;
newLink.next = current;
current.prev = newLink;
//当前指针指向newLink
//因为它是一个双重列表,newLink.prev指针指向返回当前
之前的节点// newLink旁边是什么?现在吧?
//因为它是一个双重列表,current.prev指针指向返回newLink
对于案例3,当前为空,列表末尾,但是请记住如果在for循环中将当前指针保存到当前,我们也可以解决这个问题
prevToCurrent.next = newLink;
newLink.prev = prevToCurrent;
现在让我们编译所有案例
public void insertAt( String data, int pos )
{
if( head == null )
{
head = new Node( data );
}
else
{
Node newLink = new Node(data);
Node current = head , prevToCurrent = null;
for( int x = 1; current != null && x < pos; x++ )
{
prevToCurrent = current;
current = current.next;
}
if( current == head )
{
if( head.next != null )
{
newLink.next = head;
head = newLink;
}
else
{
head = newLink;
}
}
else if( current == null )
{
prevToCurrent.next = newLink;
newLink.prev = prevToCurrent;
}
else
{
current.prev.next = newLink;
newLink.prev = current.prev.next;
newLink.next = current;
current.prev = newLink;
}
}
size++;
}
如果我在测试和编译之前出现问题,请告诉我,然后将其作为答案发布给您