代码随想录DAY03
203 移除链表元素
链表
链表表示为多个节点,每个节点包含一个值和另一个节点。
启示
1,要删除列表中的节点,直接将点前节点的next设为next的next。
2,需要定义一个临时指针用来遍历链表,不要在头指针上操作,不然会破坏原链表。
3, 将head分开处理,首先判断head节点的值是否是目标值,注意需要用while而非if条件,因为有可能出现 1 1 1 1 1这样的链表。
4,处理链表时注意判断链表为空的情况。
class Solution {
public ListNode removeElements(ListNode head, int val) {
while(head != null && head.val == val){
//判断头结点是不是需要删除的结点
head = head.next;
}
ListNode current = head; //定义一个临时指针,用来遍历链表,注意临时指针应该指向头结点
while(current != null && current.next != null){
if( current.next.val == val){
current.next = current.next.next; //移除一个结点
} else {
current = current.next;
}
}
return head;//最终返回head
}
}
5,如果想要头结点和其他结点不做区分而采用同样的逻辑,需要引入虚拟头结点。
通过虚拟头结点,可以统一链表中的移除和增加操作。
class Solution {
public ListNode removeElements(ListNode head, int val) {
// while(head != null && head.val == val){
// head = head.next;
// }