【LeetCode】203. 移除链表元素(Remove Linked List Elements)
题目要求给你链表头结点head和整数val删除链表中所有Node.val val的节点返回删除后的新头结点。输入head [1,2,6,3,4,5,6], val 6输出[1,2,3,4,5]示例 2输入head [], val 1输出[]示例 3输入head [7,7,7,7], val 7输出[]https://leetcode.cn/problems/remove-linked-list-elements/思路哑结点 dummy 前驱指针 prev当cur.val val时需要删除prev.next cur.next让prev跳过cur直接指向cur的下一个节点cur cur.nextcur移动到下一个节点注意此时prev不动当cur.val ! val时保留prev curprev向前移动到cur的位置cur cur.nextcur向前移动哑结点 dummy简介哑结点dummy/sentinel就是在真正链表头前面人为加一个“永远不删/不参与数据”的节点它的next指向原来的head。为什么要用它统一删除逻辑。不管你删的是头结点、中间结点还是尾结点都变成用前驱节点prev去改指针prev.next cur.next不需要专门处理删头结点这种特例。codeclassSolution{publicListNoderemoveElements(ListNodehead,intval){ListNodedummynewListNode(0,head);ListNodeprevdummy,curhead;while(cur!null){//删除if(cur.valval){prev.nextcur.next;curcur.next;}else{prevcur;curcur.next;}}returndummy.next;}}