203. 移除链表元素
给你一个链表的头节点 head
和一个整数 val
,请你删除链表中所有满足 Node.val == val
的节点,并返回 新的头节点 。
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
输入:head = [], val = 1
输出:[]
输入:head = [7,7,7,7], val = 7
输出:[]
思路
- 因为是单链表,所以需要两个指针
- pre指向前一个节点,初始化为null
- temp指向当前节点,初始化为head
- 删除节点时需要考虑
- 删除起始节点
- 删除末尾节点
- 删除中间节点
- pre的移动
- 删除时不移动pre
- 不删除遍历下一个移动pre
实现
public static ListNode removeElements(ListNode head, int val) {
System.out.println(head.val);
if(head==null) return head;
ListNode temp=head;
ListNode pre=null;
while(temp!=null){
// 如果该节点的值等于val
if(temp.val==val){
//如果该节点为起始节点
if(pre==null){
head=head.next;
}
//如果该节点为末尾节点
else if(temp.next==null){
pre.next=null;
}
//如果该节点为中间节点
else if(temp.next!=null){
pre.next=temp.next;
}
}
// 只有两个数值不等的时候 移动pre,删除节点的时候pre保持不变
if(temp.val!=val) pre=temp;
temp=temp.next;
}
return head;
}
}