237. Delete Node in a Linked List

本文介绍了一种在单链表中删除指定节点(除尾节点外)的方法,仅需访问该节点即可实现删除操作。提供了C++实现代码示例,包括直接覆盖节点值和正确释放内存的两种方式。

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 -> 4after calling your function.

class Solution {
public:
    void deleteNode(ListNode* node) {
        node->val = node->next->val;
        node->next = node->next->next;
        
    }
};

C++

void deleteNode(ListNode* node) {
    *node = *node->next;
}
But better properly delete the next node:

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


#include "linked_list.h" linked_list_ptr LINKED_LIST_CREATE () { linked_list_ptr linked_list_ptr_H = NULL; if (NULL == (linked_list_ptr_H = (linked_list_ptr)malloc (sizeof (linked_list_node)))) { return linked_list_ptr_H; } memset (&(linked_list_ptr_H->data), 'H', sizeof (linked_list_ptr_H->data)); linked_list_ptr_H->next = NULL; return linked_list_ptr_H; } int LINKED_LIST_FREE (linked_list_ptr linked_list_ptr_H) { if (NULL == linked_list_ptr_H) { return -1; } int num = -1; linked_list_ptr linked_list_ptr_node = linked_list_ptr_H; while (NULL != (linked_list_ptr_node = linked_list_ptr_node->next)) { free (linked_list_ptr_H); num ++; linked_list_ptr_H = linked_list_ptr_node; } free (linked_list_ptr_H); num ++; return num; } int LINKED_LIST_COUNT (linked_list_ptr linked_list_ptr_H) { int num = -1; while (NULL != linked_list_ptr_H) { linked_list_ptr_H = linked_list_ptr_H->next; num ++; } return num; } int LINKED_LIST_INSERT (linked_list_ptr linked_list_ptr_H, data_t data, int pos) { if (NULL == linked_list_ptr_H) { return -1; } int num = 0; if (-1 == pos) { while (NULL != linked_list_ptr_H->next) { linked_list_ptr_H = linked_list_ptr_H->next; num ++; } if (NULL == (linked_list_ptr_H->next = (linked_list_ptr)malloc (sizeof (linked_list_node)))) { return -2; } linked_list_ptr_H = linked_list_ptr_H->next; linked_list_ptr_H->data = data; linked_list_ptr_H->next = NULL; } else { while (NULL != linked_list_ptr_H->next && 0 != pos --) { linked_list_ptr_H = linked_list_ptr_H->next; num ++; } if (NULL == linked_list_ptr_H->next) { if (NULL == (linked_list_ptr_H->next = (linked_list_ptr)malloc (sizeof (linked_list_node)))) { return -2; } linked_list_ptr_H = linked_list_ptr_H->next; linked_list_ptr_H->data = data; linked_list_ptr_H->next = NULL; } else { linked_list_ptr linked_list_ptr_node = linked_list_ptr_H->next; if (NULL == (linked_list_ptr_H->next = (linked_list_ptr)malloc (sizeof (linked_list_node)))) { return -2; } linked_list_ptr_H = linked_list_ptr_H->next; linked_list_ptr_H->data = data; linked_list_ptr_H->next = linked_list_ptr_node; } } return num; } int LINKED_LIST_DELETE (linked_list_ptr linked_list_ptr_H, int pos) { if (NULL == linked_list_ptr_H) { return -1; } if (NULL == linked_list_ptr_H->next) { return -2; } int num = 0; if (-1 == pos) { while (NULL != linked_list_ptr_H->next->next) { linked_list_ptr_H = linked_list_ptr_H->next; num ++; } free (linked_list_ptr_H->next); linked_list_ptr_H->next = NULL; } else { while (NULL != linked_list_ptr_H->next->next && 0 != pos --) { linked_list_ptr_H = linked_list_ptr_H->next; num ++; } if (NULL == linked_list_ptr_H->next->next) { free (linked_list_ptr_H->next); linked_list_ptr_H->next = NULL; } else { linked_list_ptr linked_list_ptr_node = linked_list_ptr_H->next->next; free (linked_list_ptr_H->next); linked_list_ptr_H->next = linked_list_ptr_node; } } return num; } int LINKED_LIST_PURGE (linked_list_ptr linked_list_ptr_H) { if (NULL == linked_list_ptr_H) { return -1; } if (NULL == linked_list_ptr_H->next) { return 0; } if (NULL == linked_list_ptr_H->next->next) { return 1; } int num = 2; linked_list_ptr linked_list_ptr_node1 = NULL, linked_list_ptr_node2 = NULL; while (NULL != (linked_list_ptr_H = linked_list_ptr_H->next)->next->next) { linked_list_ptr_node1 = linked_list_ptr_H; while (NULL != linked_list_ptr_node1->next->next) { if (linked_list_ptr_H->data == linked_list_ptr_node1->next->data) { linked_list_ptr_node2 = linked_list_ptr_node1->next->next; free (linked_list_ptr_node1->next); linked_list_ptr_node1->next = linked_list_ptr_node2; continue; } linked_list_ptr_node1 = linked_list_ptr_node1->next; } if (linked_list_ptr_H->data == linked_list_ptr_node1->next->data) { free (linked_list_ptr_node1->next); linked_list_ptr_node1->next =NULL; } num ++; } return num; } linked_list_ptr LINKED_LIST_LOCATE_NUM2ADD (linked_list_ptr linked_list_ptr_H, int pos) { if (NULL == linked_list_ptr_H) { return NULL; } if (NULL == linked_list_ptr_H->next) { return NULL; } if (-1 == pos) { while (NULL != (linked_list_ptr_H = linked_list_ptr_H->next)->next); } else { while (NULL != (linked_list_ptr_H = linked_list_ptr_H->next) && 0 != pos --); } return linked_list_ptr_H; } int LINKED_LIST_LOCATE_ADD2NUM (linked_list_ptr linked_list_ptr_H, linked_list_ptr linked_list_ptr_node) { if (NULL == linked_list_ptr_H) { return -1; } if (NULL == linked_list_ptr_node) { return -2; } if (linked_list_ptr_H == linked_list_ptr_node) { return -3; } if (NULL == linked_list_ptr_H->next) { return -4; } int num = 0; while (NULL != (linked_list_ptr_H = linked_list_ptr_H->next) && linked_list_ptr_node != linked_list_ptr_H) { num ++; } if (linked_list_ptr_H != linked_list_ptr_node) { return -5; } return num; } int LINKED_LIST_REVERSE (linked_list_ptr linked_list_ptr_H) { if (NULL == linked_list_ptr_H) { return -1; } if (NULL == linked_list_ptr_H->next) { return 0; } if (NULL == linked_list_ptr_H->next->next) { return 1; } int num = 2; linked_list_ptr linked_list_ptr_node1 = linked_list_ptr_H->next, linked_list_ptr_node2 = linked_list_ptr_H->next->next, linked_list_ptr_node3 = linked_list_ptr_H->next->next->next; linked_list_ptr_node1->next = NULL; while (NULL != linked_list_ptr_node3) { linked_list_ptr_node2->next = linked_list_ptr_node1; linked_list_ptr_node1 = linked_list_ptr_node2; linked_list_ptr_node2 = linked_list_ptr_node3; linked_list_ptr_node3 = linked_list_ptr_node3->next; num ++; } linked_list_ptr_node2->next = linked_list_ptr_node1; linked_list_ptr_H->next = linked_list_ptr_node2; return num; } int LINKED_LIST_BUBBLE_SORT_MIN (linked_list_ptr linked_list_ptr_H) { int num = -1; linked_list_ptr linked_list_ptr_node = linked_list_ptr_H; while (NULL != linked_list_ptr_node) { linked_list_ptr_node = linked_list_ptr_node->next; num ++; } if (2 > num) { return num; } linked_list_ptr linked_list_ptr_node1 = linked_list_ptr_H->next, linked_list_ptr_node2 = linked_list_ptr_H->next->next; for (int i = 0; i < num - 1; i ++) { for (int j = 0; j < num - 1 - i; j ++) { if (linked_list_ptr_node1->data > linked_list_ptr_node2->data) { linked_list_ptr_node1->data ^= linked_list_ptr_node2->data; linked_list_ptr_node2->data ^= linked_list_ptr_node1->data; linked_list_ptr_node1->data ^= linked_list_ptr_node2->data; } linked_list_ptr_node1 = linked_list_ptr_node2; linked_list_ptr_node2 = linked_list_ptr_node2->next; } linked_list_ptr_node1 = linked_list_ptr_H->next; linked_list_ptr_node2 = linked_list_ptr_H->next->next; } return num; } int LINKED_LIST_BUBBLE_SORT_MAX (linked_list_ptr linked_list_ptr_H) { int num = -1; linked_list_ptr linked_list_ptr_node = linked_list_ptr_H; while (NULL != linked_list_ptr_node) { linked_list_ptr_node = linked_list_ptr_node->next; num ++; } if (2 > num) { return num; } linked_list_ptr linked_list_ptr_node1 = linked_list_ptr_H->next, linked_list_ptr_node2 = linked_list_ptr_H->next->next; for (int i = 0; i < num - 1; i ++) { for (int j = 0; j < num - 1 - i; j ++) { if (linked_list_ptr_node1->data < linked_list_ptr_node2->data) { linked_list_ptr_node1->data ^= linked_list_ptr_node2->data; linked_list_ptr_node2->data ^= linked_list_ptr_node1->data; linked_list_ptr_node1->data ^= linked_list_ptr_node2->data; } linked_list_ptr_node1 = linked_list_ptr_node2; linked_list_ptr_node2 = linked_list_ptr_node2->next; } linked_list_ptr_node1 = linked_list_ptr_H->next; linked_list_ptr_node2 = linked_list_ptr_H->next->next; } return num; } int LINKED_LIST_PRINTF (linked_list_ptr linked_list_ptr_H) { if (NULL == linked_list_ptr_H) { return -1; } int num = 0; linked_list_ptr linked_list_ptr_node = linked_list_ptr_H; while (NULL != (linked_list_ptr_node = linked_list_ptr_node->next)) { printf ("%d ", linked_list_ptr_node->data); num ++; } if (NULL != linked_list_ptr_H->next) { putchar ('\n'); } return num; } 寻找这段代码的错误
最新发布
12-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值