公司网站建设合规吗,为什么我的网站无法访问,用什么网站做ppt,深圳常桉网站建设203. 移除链表元素
https://leetcode.cn/problems/remove-linked-list-elements/description/
方法一#xff1a;迭代
迭代遍历链表
注意#xff1a;这里的head是指向第一个节点的#xff08;首元节点#xff09;#xff0c;并没有一个虚拟的头节点#xff0c;所以这…203. 移除链表元素
https://leetcode.cn/problems/remove-linked-list-elements/description/
方法一迭代
迭代遍历链表
注意这里的head是指向第一个节点的首元节点并没有一个虚拟的头节点所以这让删除节点元素变得有些麻烦
我们创建一个新的头节点的头节点preHeadpreHead指向真正的节点 head这样便于删除元素
删除方式
例如删除 nextNode 节点 curNode - nextNode - nextNextNode
则curNode.next curNode.next.next; // 跳过了中间的nextNode节点达到删除目的
这样原本的head节点变成了preHead.next便于删除头节点
这里的循环判断条件是 curNode.next ! null
public class Solution {public ListNode removeElements(ListNode head, int val) {ListNode preHead new ListNode(0, head);ListNode curNode preHead;while(curNode.next ! null){if(curNode.next.val val){curNode.next curNode.next.next;}else{curNode curNode.next;}}return preHead.next;}
}方式二递归
一直向下搜索节点直到节点为 null则返回所以对于最后一个节点他的next指向一定为null
对于不是最后一个节点的它的next等于下面一个return 返回的值而返回的值由next指向的节点的值决定
如果next指向节点的值是val则说明这个指向的节点需要跳过所以返回的是next的next如果不是val则返回next指向的本身
public class Solution {public ListNode removeElements(ListNode head, int val) {if(head null){return null;}head.next removeElements(head.next, val);return head.val val ? head.next : head;}
}我的代码
class Solution {public ListNode removeElements(ListNode head, int val) {if(head null) return null;ListNode curNode head;ListNode preNode null;while(curNode ! null){if(curNode.val val){if(preNode null){head curNode.next;}else{preNode.next curNode.next;curNode preNode;}}if(head ! curNode.next) preNode curNode;curNode curNode.next;}return head;}
}