题目描述:
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
示例:
- 输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5] - 输入:head = [], val = 1
输出:[] - 输入:head = [7,7,7,7], val = 7
输出:[]
解题思路:
使用新的头节点,让指针p先指向新的头节点,然后遍历链表,依次检查p->next->val,如果p->next->val == val,就更改p->next,否则就让指针p后移,直到指针p指向链表尾部。
注意:
循环结束的条件时 p != NULL && p->next != NULL
如果需要删除最后一个节点,则p->next 会指向NULL,然后需要退出循环。
如果不需要删除最后一个元素,则p会移动到NULL,然后退出循环。
struct ListNode* removeElements(struct ListNode* head, int val){
if(head == NULL)
return NULL;
struct ListNode newHead;
newHead.next = head;
struct ListNode *p = &newHead;
while(p && p->next)
{
if(p->next->val == val)
{
p->next = p->next->next;
}
else
{
p=p->next;
}
}
return newHead.next;
}