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

根据题目描述,我们需要将链表中值为 val 的节点删除,并返回新链表的头结点。
思路一
使用之前实现的 Find 方法找到对应值,然后使用 Erase 方法删除,直到 Find 返回空指针。此方法实现简单,但效率较低。
思路二
使用双指针法。新建一个链表,遍历原链表,如果当前节点值不等于 val,则尾插到新链表。注意处理新链表头为空的情况,并在最后将新链表尾结点的 next 置为 NULL。
typedef struct ListNode {
int val;
struct ListNode* next;
} 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;
} else {
newtail->next = pcur;
newtail = pcur;
}
}
pcur = pcur->next;
}
if (newtail) newtail->next = NULL;
return newhead;
}

二、合并两个有序链表
题目链接:













