移除链表元素(删除所有val的节点)
如图我们要删除值为val的所有元素
我的思路:
1.出于空间复杂度的考虑我们这只实例化一个节点node用来当作删除后链表的头节点
2.我们用node1=node记录头节点
3.当head!=null时我们判断head.val==vall如果是true 则使node.next=head.next
4.否则(else)我们使node.next=head,node=node.next
5.相信大家肯定有疑惑为什么只在else里node=node.next这是因为都这样会把重复的节点拿来而且会莫名的进入死循环不信大家可以试试
https://leetcode-cn.com/explore/learn/card/linked-list/195/classic-problems/752/
这里会比较绕但是想清楚了就可以了
6.最后head=head.next;
上代码:
class Solution {
public ListNode removeElements(ListNode head, int val) {
if(head==null){
return null;
}
ListNode node=new ListNode(100);//实例化一个头节点用来记录新链表
ListNode node1=node;//记录弄node
while(head!=null){
//这里会比较绕
if(head.val!=val){
node.next=head.next;/*如果head要删除直接node.next=head.next下一次如果不
相等则覆盖当前节点刚好把等于的节点绕过
*/
}else{
node.next=head;//不相等接入或覆盖
node=node.next;//移动新链表的指针
}
head=head.next;//下一个节点
}
return node1.next;//返回新链表
}