как удалить все элементы из списка в javascript - PullRequest
1 голос
/ 24 марта 2020

как удалить Удалить все элементы из связанного списка целых чисел, которые имеют значение val.

пример

Input:  1->2->6->3->4->5->6, val = 6
Output: 1->2->3->4->5

Я пробовал вот так

var removeElements = function (head, val) {
        if (!head) return null;

        let curr = head,
            pre = curr;

        while (curr != null) {
            if (curr.val == val) {
                pre.next = curr.next
                curr = curr.next;
            } else {
                pre = curr;
                curr = curr.next;
            }
        }

        return head
    };

my Первый тестовый сценарий работает нормально

console.log(JSON.stringify(removeElements(
    {
        "val": 1,
        "next": {
            "val": 2,
            "next": {
                "val": 6,
                "next":
                    {
                        "val": 3,
                        "next":
                            {
                                "val": 4,
                                "next":
                                    {
                                        "val": 5, "next":
                                            {"val": 6, "next": null}
                                    }
                            }
                    }
            }
        }
    }
    , 6)));
// working fine
// expected  1->2->3->4->5 or [1,2,3,4,5]

, но он не работает в случае ниже

console.log(JSON.stringify(removeElements(
    {
        "val": 1,
        "next": {
            "val": 1,
            "next": null
        }
    }, 1)));
// getting {"val":1,"next":null} or [1]
// expected null or []

. Пожалуйста, предложите, как этого добиться. Я сохраняю текущий узел в предыдущем узле

Ответы [ 2 ]

1 голос
/ 24 марта 2020

для особого случая я проверяю вот так

var removeElements = function (head, val) {
    if (!head) return null;

    while (head!=null){
        if(head.val == val){
            head = head.next;
        }else {
            break;
        }
    }

    let curr = head,
        pre = curr;

    while (curr != null) {
        if (curr.val == val) {
            pre.next = curr.next
            curr = curr.next;
        } else {
            pre = curr;
            curr = curr.next;
        }
    }

    return head
};
0 голосов
/ 24 марта 2020

Прошу прощения, если я не понял вопроса, это то, что вы ищете?

var removeElements = function (head, val) {
    if (!head) return null;

    let curr = head;
    let pre = null;

    while (curr != null) {
        if (curr.val == val) {
            if (pre) {
                pre.next = curr.next;
            } else {
                head = curr.next;
            }
        } else {
            pre = curr;
        }
        curr = curr.next;
    }

    return head;
};
...