代码随想录 DAY03

本文是代码随想录DAY03的学习总结,涉及203题移除链表元素、707题设计链表及206题翻转链表。在移除链表元素时,需特别处理头节点,并用临时指针避免破坏原链表。设计链表时,使用虚拟头结点简化操作,注意索引条件。翻转链表则需要理解链表链接的本质,通过双指针或递归实现。
摘要由CSDN通过智能技术生成

代码随想录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;
        // }
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值