Linus:不懂指针的写法

84 阅读1分钟

指针

链表里删除一个节点

很直观的写法

typedef struct
{
    int val;
    struct ListNode *next;
} ListNode;
void DeleteNode(ListNode *head, int val)
{
    ListNode *node = head;
    ListNode *prev = NULL;

    while (node != NULL)
    {
        if (node->val == val)
        {
            if (node == head)
            {
                head = head->next;
            }
            else
            {
                prev->next = node->next;
            }
        }
        else
        {
            prev = node;
            node = node->next;
        }
    }
}

懂指针的写法

void DeleteNodeV2(ListNode *head, int val)
{
    ListNode **pp = &head;
    ListNode *node = head;

    while (node != NULL)
    {
        if (node->val == val)
        {
            *pp = node->next;   
        }
        else
        {
            node = node->next;
            pp = &node;
        }
    }
}