
一、移除链表元素
题目链接:https://leetcode.cn/problems/remove-linked-list-elements/
题目描述与示例:

根据题目描述,我们需要删除链表中值为指定值的节点,并返回新链表的头结点。
思路一
使用之前实现的链表方法,通过 Find 方法找到对应值,然后使用 Erase 方法删除,直到 Find 方法返回空指针结束。该方法实现简单,但效率较低。
思路二
本质与顺序表删除类似,使用双指针法。新建一个链表,遍历原链表,将非目标值的节点尾插到新链表。注意处理新链表头为空的情况,并在遍历结束后将新链表尾结点的 next 置为 NULL。
参考实现:
typedef struct ListNode ListNode;
struct ListNode* removeElements(struct ListNode* head, int val) {
ListNode* newhead = NULL;
ListNode* newtail = NULL;
ListNode* pcur = head;
while (pcur) {
if (pcur->val != val) {
if (newhead == NULL) {
newhead = newtail = pcur;
} else {
newtail->next = pcur;
newtail = pcur;
}
}
pcur = pcur->next;
}
if (newtail) newtail->next = NULL;
return newhead;
}




