删除链表元素的C语言代码
以下是删除链表元素的C语言代码:
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* removeElements(struct ListNode* head, int val){
struct ListNode *dummy = (struct ListNode *)malloc(sizeof(struct ListNode));
dummy->next = head;
struct ListNode *prev = dummy;
struct ListNode *curr = head;
while (curr) {
if (curr->val == val) {
prev->next = curr->next;
free(curr);
curr = prev->next;
} else {
prev = curr;
curr = curr->next;
}
}
head = dummy->next;
free(dummy);
return head;
}
这个函数使用了一个虚拟头结点(dummy),它的next指针指向原链表的头结点head。然后使用两个指针prev和curr来遍历链表,prev指向当前结点的前一个结点,curr指向当前结点。
如果curr结点的值等于val,那么将prev的next指针指向curr的下一个结点,释放curr结点的内存,然后将curr指向prev的next指针指向的下一个结点。如果curr结点的值不等于val,则将prev指向curr,将curr指向curr的下一个结点。
最后,将head指向dummy的next指针指向的结点,释放dummy结点的内存,然后返回head
原文地址: https://www.cveoy.top/t/topic/ey7f 著作权归作者所有。请勿转载和采集!