目录
1 力扣-移除链表元素
链接:力扣-移除链表元素
1.1 示例
1.2 思路
但是,如果cur
直接等于head
,即头值就是val
,则prev->next
会非法访问(此时prev
是NULL
)
所以应该这样
由于最后返回head,所以这里可以传一级指针
1.3 实现
struct ListNode* removeElements(struct ListNode* head, int val){ struct ListNode* prev = NULL; struct ListNode* cur = head; while (cur) { if (cur->val == val) { if(cur==head) { head=cur->next; free(cur); cur=head; } else { prev->next = cur->next; free(cur); cur=prev->next; } } else { prev = cur; cur = cur->next; } } return head; }
但是,如果遇到这样
这里返回NULL
,头就是val
如果走读代码+画图还是不懂,直接带入vs里
struct ListNode { int val; struct ListNode* next; }; struct ListNode* removeElements(struct ListNode* head, int val) { struct ListNode* prev = NULL; struct ListNode* cur = head; while (cur) { if (cur->val == val) { if (cur == head) { head = cur->next; free(cur); cur = head; } else { prev->next = cur->next; free(cur); cur = prev->next; } } else { prev = cur; cur = cur->next; } } return head; } int main() { struct ListNode* newnode1 = (struct ListNode*)malloc(sizeof(struct ListNode)); struct ListNode* newnode2 = (struct ListNode*)malloc(sizeof(struct ListNode)); struct ListNode* newnode3 = (struct ListNode*)malloc(sizeof(struct ListNode)); struct ListNode* newnode4 = (struct ListNode*)malloc(sizeof(struct ListNode)); newnode1->val = 7; newnode2->val = 7; newnode3->val = 7; newnode4->val = 7; struct ListNode* head = removeElements(newnode1, 7); return 0; }
上面是题目中代码,下面是自己写的main函数
注意:要自己创建一个链表,就写几个malloc,并赋值,再调用函数
最后调试