我正在尝试根据双向链表中节点的位置搜索节点。例如,如果列表包含1,2,3,4,5并且我想获得位置3,它将返回位置数据,即3.我能够获得第一和第二位置,但是当我尝试任何位置时第二个位置之后的其他位置,它只返回第二个位置。我不确定是什么问题。到目前为止,这是我的代码:
插入方法
public void insertAtStart(String data)
{
Node ptr = new Node(data);
if(head == null)
{
head = ptr;
tail = head;
}
else
{
head.prev = ptr;
ptr.next = head;
head = ptr;
}
size++;
}
搜索方法
public Node searchAt(int pos)
{
Node found = head;
if(isEmpty())
{
System.out.println("List is empty");
return null;
}
if(pos == 1)
return found;
for(int i = 2; i <= size; i++)
{
if(i == pos)
{
found = head.next;
}
}
return found;
}
测试:
doc.insertAtStart("1");
doc.insertAtStart("2");
doc.insertAtStart("3");
doc.insertAtStart("4");
doc.insertAtStart("5");
doc.printReverse();
Node newNode = doc.searchAt(4);
System.out.println("Node" + newNode.data);
输出:
1: 1
2: 2
3: 3
4: 4
5: 5
Node: 2
答案 0 :(得分:3)
问题出在这一行:
found = head.next;
你总是返回第二个元素(第一个元素的工作归功于if
语句的第一个分支。)
您应该通过列表运行并获取正确的元素。
答案 1 :(得分:3)
稍微调整for循环:
到达位置时中断循环。
for(int i = 2; i <= size; i++)
{
found = head.next;
if(i == pos)
{
break;
}
}