📅  最后修改于: 2023-12-03 14:40:26.287000             🧑  作者: Mango
本题涉及C语言的链表操作,需要熟悉链表的创建、插入、删除等操作。
给定一个链表的头结点head
,删除链表中所有值为val
的节点。
遍历链表,如果当前节点的值等于目标值,则删除当前节点。在删除节点之前,需要将当前节点的前一个节点和后一个节点相连。
删除一个节点时,可以通过设置一个指针pre
,使其指向当前节点的前一个节点,然后将pre
与当前节点的后一个节点相连,即完成了节点的删除操作。
需要注意的是,如果头结点的值等于目标值,则要特殊处理,即将头结点后移。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeElements(struct ListNode* head, int val) {
struct ListNode* pre = NULL;
struct ListNode* cur = head;
while (cur) {
if (cur->val == val) {
if (pre == NULL) {
head = head->next;
cur = head;
} else {
pre->next = cur->next;
cur = cur->next;
}
} else {
pre = cur;
cur = cur->next;
}
}
return head;
}
链表的操作需要考虑节点的添加、删除、更新等问题,需要注意空节点和头结点的特殊处理。在解决链表问题时,建议使用双指针、虚拟头结点等技巧。