Skip to content

二叉树 - 删除排序链表中的重复元素 II

javascript
"use strict";
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
class ListNode {
    constructor(val, next) {
        this.val = (val === undefined ? 0 : val);
        this.next = (next === undefined ? null : next);
    }
}
let head = new ListNode(1, new ListNode(2, new ListNode(3, new ListNode(3, new ListNode(4, new ListNode(4, new ListNode(5)))))));
if (head === null) {
    console.log('链表为空');
}
let isDelete = false;
// 虚拟头节点
let Vhead = new ListNode(0, head);
let deleteNode = Vhead;
let n1 = Vhead.next;
let n2 = (_a = Vhead.next) === null || _a === void 0 ? void 0 : _a.next; //...
while (n2 === null || n2 === void 0 ? void 0 : n2.next) {
    if ((n1 === null || n1 === void 0 ? void 0 : n1.val) === n2.val) {
        n2 = n2.next;
        isDelete = true;
    }
    else {
        if (isDelete) {
            deleteNode.next = n2; // 截断
            isDelete = false;
        }
        else {
            // deleteNode= deleteNode.next
            // n1 = n1.next
            // n2 = n2.next
        }
    }
}
console.log(Vhead.next);
typescript
class ListNode {
    val: number
    next: ListNode | null
    constructor(val?: number, next?: ListNode | null) {
        this.val = (val === undefined ? 0 : val)
        this.next = (next === undefined ? null : next)
    }
}

let head=new ListNode(1, new ListNode(2, new ListNode(3, new ListNode(3, new ListNode(4, new ListNode(4, new ListNode(5)))))))


if (head === null) {
   console.log('链表为空')
}
let isDelete = false
// 虚拟头节点
let Vhead = new ListNode(0, head)

let deleteNode= Vhead
let n1 = Vhead.next
let n2 = Vhead.next?.next //...
while (n2?.next) {
    if (n1?.val === n2.val) {
        n2 = n2.next
        isDelete = true

    } else {

        if (isDelete) {
            deleteNode.next = n2 // 截断
            isDelete = false
        } else {
            // deleteNode= deleteNode.next
            // n1 = n1.next
            // n2 = n2.next

        }


    }


}
console.log(Vhead.next)

源码地址