一、移除链表元素
题目链接:移除链表元素


根据题目描述,题意是将一个链表中的某个值的节点删除,然后返回新链表的头结点。
思路一
首先最简单的思路是,使用之前实现的链表方法,通过 Find 方法找到对应的值,然后使用 Erase 方法删除,直到 Find 方法返回空指针结束。由于该方法思路较好实现,此处不再赘述。
思路二
本题可使用双指针法。新建一个链表,遍历原链表,如果当前节点的值不是要删除的值,则将其尾插到新链表。若遇到要删除的节点则跳过。注意新链表尾结点的 next 需置为空。
typedef struct ListNode ListNode;
struct ListNode* removeElements(struct ListNode* head, int val) {
ListNode* newhead = NULL, *newtail = NULL;
newhead = newtail = NULL;
ListNode* pcur = head;
while (pcur) {
if (pcur->val != val) {
if (newhead == NULL) {
newhead = newtail = pcur;
} {
newtail->next = pcur;
newtail = pcur;
}
}
pcur = pcur->next;
}
(newtail) newtail->next = ;
newhead;
}















