移除链表元素
移除链表元素
删除链表中等于给定值 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; } };
浙公网安备 33010602011771号