算法训练day5/203.移除链表元素

张开发
2026/4/18 12:10:32 15 分钟阅读

分享文章

算法训练day5/203.移除链表元素
1.题目2.代码实现/** * Definition for singly-linked list. * 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* cur dummy; while (cur-next ! NULL) { if (cur-next-val val) { // 找到目标节点跳过它 struct ListNode* temp cur-next; cur-next cur-next-next; free(temp); } else { // 没找到移动指针 cur cur-next; } } struct ListNode* newHead dummy-next; free(dummy); return newHead; }3.步骤第一步创建虚拟头节点统一处理头节点被删除的情况定义遍历指针从dummy开始。struct ListNode* dummy (struct ListNode*)malloc(sizeof(struct ListNode)); dummy-next head; struct ListNode* cur dummy;第二步用while循环来检查每个节点再用if语句来判断是否删除如果不要就继续往前走。while (cur-next ! NULL) { if (cur-next-val val) { // 找到目标节点跳过它 struct ListNode* temp cur-next; cur-next cur-next-next; free(temp); } else { // 没找到移动指针 cur cur-next; } }第三步返回新链表struct ListNode* newHead dummy-next; free(dummy); return newHead;4.心得学会虚拟头节点事倍功半。

更多文章