移除链表元素

移除链表元素
删除链表中等于给定值 val 的所有节点。

示例:

输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5

 

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        ListNode *Head=new ListNode(0); //每次查询下一结点val值,因此设置虚拟头指针,方便查询修改链表头的
        Head->next=head;                //val值元素
        ListNode *p=Head;   //双指针,p指向val值元素前的元素,q指向val值后的元素,使p指向q
        ListNode *q=Head;
        bool flag;
        while(q->next!=nullptr) {
            flag=false;    //标记当前元素是否是val值,如果是,查询下一结点,如果不是,更新p指针
            if(q->next->val == val) {
                q=q->next;
                flag=true;
            }
            if(flag==false) {
                q=q->next;
                p->next=q;
                p=p->next;
            }
        }
        if(flag==true) { //flag==true说明链表末端有至少一个值为val的元素
            p->next=nullptr;
        }
        head=Head->next;
        return head;
    }
};

 

posted @ 2020-11-21 16:16  yanjan  阅读(72)  评论(0)    收藏  举报