237. Delete Node in a Linked List

本文介绍了一种在单链表中删除指定节点的方法,该方法仅使用指向待删除节点的指针,通过交换当前节点和下一节点的数据来实现,适用于除尾节点外的所有情况。

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.

解题思路:
删除指定节点,没有给出前指针,只有交换当前节点和下一个节点,删除下一个节点。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    void deleteNode(ListNode* node) {
        if (node == NULL || node->next == NULL) return;
        node->val = node->next->val;
        node->next = node->next->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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值