Leonard代码随想录算法训练营第三天|● 链表理论基础 ● 203.移除链表元素 ● 707.设计链表 ● 206.反转链表

第二章 链表

今日任务

● 链表理论基础
● 203.移除链表元素
● 707.设计链表
● 206.反转链表

详细布置

链表理论基础

建议:了解一下链接基础,以及链表和数组的区别

文章链接:https://programmercarl.com/%E9%93%BE%E8%A1%A8%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html

203.移除链表元素

//没有使用虚拟头结点,从head和不是head分开分析
class Solution {
    public ListNode removeElements(ListNode head, int val) {
        while(head!=null && head.val==val){
            head=head.next;
        }
        ListNode cur=head;
        while(cur!=null){
            while (cur.next!=null && cur.next.val==val){
                cur.next=cur.next.next;
            }
            cur=cur.next;
        }return head;
    }
}
//使用虚拟头结点
class Solution {
    public ListNode removeElements(ListNode head, int val) {
        ListNode dummy=new ListNode(-1,head);   //创建虚拟头结点dummy
        dummy.next=head;          //dummy在head节点前一个的位置
        ListNode cur=dummy;         //dummy的值不能改变,所以定义一个cur
        while(cur.next!=null){           //cur即虚假的head,这里就上面代码的后面一样了
            if(cur.next.val==val){
                cur.next=cur.next.next;
            }else
            cur=cur.next;
        }return dummy.next;     //dummy.next即新head,为什么不能返回head呢,因为head可能已经被我们删除了
    }
}

建议: 本题最关键是要理解 虚拟头结点的使用技巧,这个对链表题目很重要。

题目链接/文章讲解/视频讲解::https://programmercarl.com/0203.%E7%A7%BB%E9%99%A4%E9%93%BE%E8%A1%A8%E5%85%83%E7%B4%A0.html

707.设计链表

之后补上这一部分
建议: 这是一道考察 链表综合操作的题目,不算容易,可以练一练 使用虚拟头结点

题目链接/文章讲解/视频讲解:https://programmercarl.com/0707.%E8%AE%BE%E8%AE%A1%E9%93%BE%E8%A1%A8.html

206.反转链表

//双指针解法
class Solution {
   public ListNode reverseList(ListNode head) {
       ListNode pre=null;
       ListNode cur=head;
       ListNode tem=null;
       while(cur!=null){
           tem=cur.next;  //tem临时保存cur.位置
           cur.next=pre;    //指向pre,重要的表示反转的一步
           pre=cur;  //这里顺序不能错,pre先过去,cur再走,否则pre找不到地方了
           cur=tem;   //多亏tem保存,cur找回继续前进的路
       }return pre;
   }
}

建议先看我的视频讲解,视频讲解中对 反转链表需要注意的点讲的很清晰了,看完之后大家的疑惑基本都解决了。

==题目链接/文章讲解/视频讲解:https://programmercarl.com/0206.%E7%BF%BB%E8%BD%AC%E9%93%BE%E8%A1%A8.html ==

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值