指针
链表里删除一个节点
很直观的写法
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;
}
}
}