关闭

Easy-题目5:237. Delete Node in a Linked List

201人阅读 评论(0) 收藏 举报
分类:

题目原文:
Write a function to delete a node (except the tail) in a singly linked list, given only access to that node.
Supposed the linked list is 1 -> 2 -> 3 -> 4 and you are given the third node with value 3, the linked list should become 1 -> 2 -> 4 after calling your function.
题目大意:
删除单链表中指定节点。
题目分析:
把指定节点的值改成后面的值,并令其后继节点指向原后继节点的后继节点。
源码:(language:c)

void deleteNode(struct ListNode* node) {
    if(node) {
        node->val=node->next->val;
        node->next=node->next->next;
    }
}

成绩:
4ms,beats 0.52% 众数4ms,99.48%
Cmershen的碎碎念:
在数据结构课上,我们删除链表节点的方法是令其前驱节点指向后继节点。可是本题中只有当前节点,又是单链表,无法获得其前驱节点。这个问题困扰了我一段时间,但我发现还有value值可以利用,因此得出上述算法。
其实测试用例不完全,根据源码,Node->next是有可能为空的,再引用val和next有可能引发NPD异常。因此上述的ac代码不可以用于删除链表中最后一个节点。(dts大法好!!!(^__^) 嘻嘻……)

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:55950次
    • 积分:3198
    • 等级:
    • 排名:第10679名
    • 原创:270篇
    • 转载:53篇
    • 译文:0篇
    • 评论:7条
    文章分类
    最新评论