237-e-Delete Node in a Linked List

来源:互联网 发布:高中背单词软件 编辑:程序博客网 时间:2024/06/05 14:10

删除链表的指定节点,但只给你要删除的节点,没有给链表头结点。如果不是看到是easy题,我可能会觉得很难:上一个节点指针没给啊怎么删除啊。后来结合难度再一想,难道是要移动节点的值么,就像数组前移那样。照着这个想法没几分钟搞出来一提交,竟然ac了。这...有意义吗?leet的题目应该都是要转弯的,虽然这种土方法能ac但其实毫无意义。果然网上稍微搜了下,可以将要删除的节点伪装成next,然后将next删除就行了。虽然没给上一个节点,但我们可以将下一个节点扯到本节点上,这样一来只要修改2个node就行,跟传统删除比起来就像是前删和后删吧。

土方法:

//-------------------------------------------- //只给了要删除的节点,没有给链表头节点void deleteNode(struct ListNode* node) {    if (node == NULL || node->next == NULL)        return;    struct ListNode *tmp = node;    while (tmp->next->next != NULL) {        tmp->val = tmp->next->val;        tmp = tmp->next;    }    tmp->val = tmp->next->val;    tmp->next = NULL;    free(tmp->next);}

修改后的方法:

void fix_deleteNode(struct ListNode *node) {    if (node == NULL || node->next == NULL)        return;    struct ListNode *del = node->next;    node->val = del->val;    node->next = del->next;    free(del);}


0 0
原创粉丝点击