0

晚上好

我正在尝试自己实现一个链接列表,当我想创建搜索方法时遇到了问题。显然,当您要搜索节点(将用于在某个位置插入节点)时,您将必须评估一些值以查看您是否到达了正确的位置。考虑到我的节点只有一个数据字段作为标识符,除了使用它之外,我没有看到任何其他方法。但是,由于数据字段不是唯一的,因此可能有多个节点符合条件。

考虑以下列表:5, 7, 2, 8, 3, 1, 6, 5, 8, 4, 2。当我想在列表中的某处添加节点时(例如:在值为 8 的节点之后),他将遍历列表并在第一次出现“8”之后添加新节点。如果我想在第 2 个 8 之后插入它应该怎么做?

这甚至可以通过单链表实现吗?

除此之外,我想对我的“removeLast()”方法有一些反馈,它似乎没有做我想做的事情(从列表中删除最后一个节点)。我知道如果列表只有 1 个值,我的代码不应该工作,我会在删除最后一个节点的一般代码工作后立即调查。

我的代码可以在这里找到。

用代码编辑:

 public class SingleLinkedList {

 public void deleteLast() {
    if (lastNode != null) {
        Node currentNode = firstNode;

        while (currentNode != null) {
            Node nextNode = currentNode.getNextNode();
            Node nextNextNode = nextNode.getNextNode();

            if (nextNextNode == null) {
                nextNextNode = null;
                lastNode = nextNode;
            }
        }
        listSize--;
    }
}

}

4

2 回答 2

3

当然可以 - 您需要跟踪您通过的对象的数量,并且在您通过n的对象等于寻找的对象之后 - 插入新数据:

public void addAfterNth(Object data,Object o, int n) { 
    Node curr = firstNode;
    while (curr != null) { 
        if (curr.data.equals(o)) n--;
        if (n == 0) { 
            Node newNode = new Node(data,curr.nextNode);
            curr.setNext(newNode);
            break;
        }
        curr = curr.getNextNode();
    }
}

在这里,您在遇到数据等于 的节点data后插入一个新节点,该节点的数据在参数中表示。no

运行:

SingleLinkedList list = new SingleLinkedList();
list.addLast(5);
list.addLast(7);
list.addLast(2);
list.addLast(8);
list.addLast(3);
list.addLast(1);
list.addLast(6);
list.addLast(5);
list.addLast(8);
list.addLast(4);
list.addLast(2);
list.drawList();
list.addAfterNth(999,8, 2);
System.out.println("");
list.drawList();

产量(如预期):

5, 7, 2, 8, 3, 1, 6, 5, 8, 4, 2, 
5, 7, 2, 8, 3, 1, 6, 5, 8, 999, 4, 2, 
于 2012-12-03T08:05:20.890 回答
1

这是删除LL的最后一个代码的伪代码。以上答案正确回答了您在特定位置插入的问题。

if (START == NULL){
    Print: Linked-List is empty.
}
else{
    PTR = START, PREV = START
    while (PTR->LINK != NULL)enter code here
        PREV = PTR //Assign PTR to PREV
    PTR = PTR->LINK //Move PTR to next node

    ITEM = PTR->INFO //Assign INFO of last node to ITEM
    If (START->LINK == NULL) Then //If only one node is left
        START = NULL //Assign NULL to START
    Else
        PREV->LINK = NULL //Assign NULL to link field of second last node

    Delete PTR
}
于 2012-12-03T08:53:15.187 回答