题目描述:
删除链表中等于给定值 val 的所有节点。
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
解法一:考虑要删除结点为头结点的情况
struct ListNode* removeElements(struct ListNode* head, int val){
if(head!=NULL&&head->val==val) head=head->next;//考虑被删除结点为头结点的情况
struct ListNode *tmp = head ;//保存头结点的位置,以便程序输出更新后的链表
while(tmp!= NULL){
if(tmp->next!= NULL&&tmp->next->val == val) {//若结点的val与测试输入val相等
tmp->next = tmp ->next ->next;//删除结点
}
else{
tmp = tmp ->next;//遍历链表
}
}
return head;
}
时间复杂度:O(n)
空间复杂度:O(1)
算法流程图如下: