LeetCode 237.删除链表中的节点

LeetCode 237.

我的思路

无法访问前一个结点,因此不能用惯常的删除结点方法。
那么就从后往前赋值,然后删除结尾结点。
这是我一开始的思路,但不是最好的方法。

void deleteNode(ListNode* node) {
        ListNode *p = node;
        while(p->next){
            p->val = p->next->val;
            if(!p->next->next){
                ListNode *temp = p->next;
                p->next = NULL;
                delete(temp);
                return ;
        }
            p = p->next;
    }
}

更好的方法

还是看了题后评论,大呼精巧。
这种方法运用了链表“”的特性,而我的思路是操作数组的思路。

void deleteNode(ListNode* node) {
        node->val = node->next->val;
        ListNode *temp = node->next;
        node->next = node->next->next;
        delete(temp);
}

不删除多余结点的话会快上一点吧,但没必要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值