如何优化昆明移动网站的推广效果?
摘要:昆明移动网站建设,网站推广软件污,wordpress pdf缩略图,温州网站设计公司哪家好Leetcode203 移除链表元素 题目描述: 给你一个链表的头节点 head 和一个整数 val &
昆明移动网站建设,网站推广软件污,wordpress pdf缩略图,温州网站设计公司哪家好Leetcode203
移除链表元素
题目描述#xff1a;
给你一个链表的头节点 head 和一个整数 val #xff0c;请你删除链表中所有满足 Node.val val 的节点#xff0c;并返回 新的头节点 。
示例 1#xff1a; 输入#xff1a;head [1,2,6,3,4,5,6], val 6
输出#xf…Leetcode203
移除链表元素
题目描述
给你一个链表的头节点 head 和一个整数 val 请你删除链表中所有满足 Node.val val 的节点并返回 新的头节点 。
示例 1 输入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
输出[]原链表操作
如果我们选择在原链表上进行操作的话我们需要考虑两个方面的问题
头节点为我们要移除的元素非头结点为我们要移除的元素 Java版本
class Solution {public ListNode removeElements(ListNode head, int val) {//处理头节点while(head ! null head.val val){head head.next;} //处理头节点为空的情况if(head null){return head;}//确保head.val ! val 的情况ListNode pre head;ListNode cur head.next;while(cur ! null){if(cur.val val){pre.next cur.next;}else{pre cur;}cur cur.next;}return head;}
}class Solution {public ListNode removeElements(ListNode head, int val) {while(head ! null head.val val){head head.next;}ListNode cur head;while(cur ! null){while(cur.next ! null cur.next.val val){cur.next cur.next.next;}cur cur.next;}return head;}
}C版本
class Solution {
public:ListNode* removeElements(ListNode* head, int val) {//删除头节点while(head ! NULL head-val val){ListNode* tmp head;head head-next;delete tmp;}//删除非头结点ListNode* cur head;while(cur ! NULL cur-next ! NULL){if(cur-next-val val){ListNode* tmp cur-next;cur-next cur-next-next;delete tmp;}else{cur cur-next;}}return head;}
};虚拟头节点
介绍
虚拟头节点是一种在链表中使用的特殊节点它通常作为头节点的前一个节点但是不存储具体的数据。它的目的是为了简化链表的操作特别是在处理边界条件和插入、删除操作时提供便利。
在传统的链表实现中如果要对链表进行插入或者删除操作我们需要分别处理头节点的情况和中间节点的情况。这样就需要额外的代码来处理这些边界情况增加了代码的复杂度。
而使用虚拟头节点我们可以将这些特殊情况都统一为对中间节点的操作。具体来说虚拟头节点就像是链表中的一个普通节点但是它不存储具体的数据。当链表为空时虚拟头节点就是唯一的节点它的下一个节点就是链表的真正的头节点。当链表非空时虚拟头节点的下一个节点就是链表的真正的头节点。
插入操作时我们只需要将新节点插入到虚拟头节点的后面即可而不需要单独处理头节点为空的情况。删除操作时我们只需要将虚拟头节点的后继节点指向要删除的节点的后继节点即可而不需要单独处理删除头节点的情况。
使用虚拟头节点的好处是简化了链表的操作逻辑和代码让代码更加简洁和可读。同时它也保证了链表的头节点和其他节点的统一性避免了对头节点的特殊处理。
总结起来虚拟头节点是一个不存储具体数据的特殊节点它位于真正的头节点之前用于简化链表的操作和处理边界情况。它统一了对头节点和其他节点的操作使得代码更加简洁和可维护
所以当我们在原链表操作时我们需要针对每一种情况去编写逻辑但使用虚拟头结点的话就可以统一移除节点这一操作~
Java版本
class Solution {public ListNode removeElements(ListNode head, int val) {ListNode dummyHead new ListNode(-1);dummyHead.next head;ListNode pre dummyHead;while(pre.next ! null){if(pre.next.val val){pre.next pre.next.next;}else{pre pre.next;}}return dummyHead.next;}
}
