LeetCode203 移除链表元素
程序员文章站
2022-06-17 18:31:49
...
双指针遍历整个链表,
pre
指针保存当前遍历节点的前一个节点方便删除,cur
当前遍历的节点
因为可能删除头节点可以采用哨兵机制
package CLinkedList;
/**
* @Author Zhou jian
* @Date 2020 ${month} 2020/4/9 0009 15:30
*/
public class Problem203 {
/**
* 引入一种思想叫哨兵节点
*
* @param head
* @param val
* @return
* 如果删除的节点是中间的节点,则问题似乎非常简单:
选择要删除节点的前一个结点 prev。
将 prev 的 next 设置为要删除结点的 next
当要删除的一个或多个节点位于链表的头部时,事情会变得复杂。
可以通过哨兵节点去解决它,哨兵节点广泛应用于树和链表中,如伪头、伪尾、标记等,
它们是纯功能的,通常不保存任何数据,其主要目的是使链表标准化,
如使链表永不为空、永不无头、简化插入和删除。
*/
public ListNode removeElements(ListNode head, int val) {
if(head==null) return null;
//这个很管件哨兵节点
ListNode virture = new ListNode(-1);
virture.next = head;
//保存前一个节点,方便删除
ListNode prev = virture;
ListNode temp = head;
while(temp!=null){
//发现相等值则直接删除
if(temp.val==val){
prev.next = temp.next;
//在这一步prev还是不能移动思考下为什么
temp=temp.next;
} else{
//不是相等的元素怒则移动指针
prev = prev.next;
temp=temp.next;
}
}
//哨兵的下一个节点
return virture.next;
}
}
推荐阅读
-
【leetcode 简单】第十八题 删除排序链表中的重复元素
-
jQuery移除元素自动解绑事件实现思路及代码
-
C#遍历集合与移除元素的方法
-
【转载】C#中List集合使用RemoveRange方法移除指定索引开始的一段元素
-
JavaScript实现动态添加、移除元素或属性的方法分析
-
【转载】C#中List集合使用RemoveAt方法移除指定索引位置的元素
-
html5\CSS3有哪些新特性、移除了哪些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分HTML和HTML5?
-
html5那些新特性,移除了哪些元素?如何处理html5的兼容性问题?如何区分html和html5?
-
如何用jQuery来移除页面上的HTML元素?
-
元素标签div,document,window,a所属的内置类及其原型链表格一览