在给定位置双向链表中搜索节点

时间:2017-02-19 02:17:10

标签: java

我正在尝试根据双向链表中节点的位置搜索节点。例如,如果列表包含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

2 个答案:

答案 0 :(得分:3)

问题出在这一行:

found = head.next;

你总是返回第二个元素(第一个元素的工作归功于if语句的第一个分支。)

您应该通过列表运行并获取正确的元素。

答案 1 :(得分:3)

稍微调整for循环:

  • 每次迭代在列表中移动一个位置
  • 到达位置时中断循环。

    for(int i = 2; i <= size; i++)
    {
        found = head.next;
        if(i == pos)
        {
            break;
        }
    }