首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在理解这个while循环的逻辑上有困难

在理解这个while循环的逻辑上有困难
EN

Stack Overflow用户
提问于 2020-03-26 06:18:08
回答 1查看 37关注 0票数 1

我正在练习单链表,并且我无法理解所提供的示例代码中某一部分的逻辑。下面是完整的代码:

代码语言:javascript
复制
function Node(data) {
    this.data = data;
    this.next = null;
}

function SinglyList() {
    this._length = 0;
    this.head = null;
}

SinglyList.prototype.add = function(value) {
    var node = new Node(value),
        currentNode = this.head;

    // 1st use-case: an empty list
    if (!currentNode) {
        this.head = node;
        this._length++;

        return node;
    }

    // 2nd use-case: a non-empty list
    while (currentNode.next) {
        currentNode = currentNode.next;
    }

    currentNode.next = node;

    this._length++;

    return node;
};

SinglyList.prototype.searchNodeAt = function(position) {
    var currentNode = this.head,
        length = this._length,
        count = 1,
        message = {failure: 'Failure: non-existent node in this list.'};

    // 1st use-case: an invalid position
    if (length === 0 || position < 1 || position > length) {
        throw new Error(message.failure);
    }

    // 2nd use-case: a valid position
    while (count < position) {
        currentNode = currentNode.next;
        count++;
    }

    return currentNode;
};

SinglyList.prototype.remove = function(position) {
    var currentNode = this.head,
        length = this._length,
        count = 0,
        message = {failure: 'Failure: non-existent node in this list.'},
        beforeNodeToDelete = null,
        nodeToDelete = null,
        deletedNode = null;

    // 1st use-case: an invalid position
    if (position < 0 || position > length) {
        throw new Error(message.failure);
    }

    // 2nd use-case: the first node is removed
    if (position === 1) {
        this.head = currentNode.next;
        deletedNode = currentNode;
        currentNode = null;
        this._length--;

        return deletedNode;
    }

    // 3rd use-case: any other node is removed
    while (count < position) {
        beforeNodeToDelete = currentNode;
        nodeToDelete = currentNode.next;
        count++;
    }

    beforeNodeToDelete.next = nodeToDelete.next;
    deletedNode = nodeToDelete;
    nodeToDelete = null;
    this._length--;

    return deletedNode;
};

我很难理解最后一个方法中的while循环。

代码语言:javascript
复制
while (count < position) {
        beforeNodeToDelete = currentNode;
        nodeToDelete = currentNode.next;
        count++;
}

我知道这段代码的目的是遍历列表,直到到达所需的节点。但我不明白这段代码是如何实现的。它似乎会在循环的每次迭代中保持相同的值,而不是在树中搜索。currentNode的值是否在我遗漏的某些方面发生了变化?任何提示或建议都将非常感谢:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-26 06:27:01

Nvm。我解决了。看起来代码毕竟是一个错误。一个可行的解决方案的例子是:

代码语言:javascript
复制
while(count<position){ 
 currentnode = currentNode.next; 
 beforenodetodelete = currentNode; 
 nodetodelete = currentNode.next;
 count++; 
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60858201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档