深圳横岗做网站的,青羊区电商型网站建设设计,百度搜索量怎么查,免费建站论坛leetcode203
什么是链表
之前不懂链表的数据结构#xff0c;一看到链表的题目就看不明白 链表是通过next指针来将每个节点连接起来的#xff0c;题目中给的链表是单向链表#xff0c;有两个值#xff0c;一个val表示值#xff0c;一个next#xff1a;表示连接的下一个…leetcode203
什么是链表
之前不懂链表的数据结构一看到链表的题目就看不明白 链表是通过next指针来将每个节点连接起来的题目中给的链表是单向链表有两个值一个val表示值一个next表示连接的下一个节点 对于题目中给出的head [1,2,6,3,4,5,6]实际的结构是这样的
const node6 { val: 6, next: null }
const node5 { val: 5, next: node6 }
const node4 { val: 4, next: node5 }
const node3 { val: 3, next: node4 }
const node2 { val: 6, next: node3 }
const node1 { val: 2, next: node2 }
const nodeList { val: 1, next: node1 }nodeList是头节点然后通过next连接下一个节点一直到next:null。 单向链表都只能向下查询如果是双向链表的话会多一个prev属性指向前一个节点
方法1
题目中的意思是如果找到一个节点的val target那么就要删除这个节点。 关于删除节点如果需要删除的节点在头节点我们需要把头节点往下移动通过改变头节点的方式来删除。 例如head [1,1,2,3],val 1 那么我们让head head.next来修改head的头节点就可以删除头节点。 如果需要删除掉节点在中间像下面图片中一样原本cur.next - 6我们需要跳过这一项那么就让cur.next cur.next.next就跳过了中间项这样的话新的节点就是1-2-3
var removeElements function (head, val) {if(!head){return head;}// 头节点是目标删除节点while(head head.val val){head head.next;}let cur head;while(cur){while(cur.next cur.next.val val){cur.next cur.next.next;}cur cur.next;}return head;
}方法2
前面方法1中针对头节点和非头节点的删除方式其实是不同的那么有没有什么方式可以让头节点和非头节点都用相同的方式来进行删除呢 我们可以考虑创建一个**虚拟头节点dummy**让dummy.next head 这样的话需要删除掉所有节点都是属于中间节点都以删除中间节点的方式来进行删除操作即可 需要注意的是最终返回的是dummy.next因为dummy是我们创建出来的虚拟节点实际是不存在的真正的头节点是dummy.next
var removeElements function (head, val) {if (!head) {return head;}let dummy { val: 0, next: head };let cur dummy;while (cur) {while (cur.next cur.next.val val) {cur.next cur.next.next;}cur cur.next;}return dummy.next;
}