算法学习笔记 2023/04/07

本文介绍了链表的基础知识,包括如何定义链表节点,以及进行链表的移除、设计和反转等操作。在移除链表中提到了两种方法,设计链表需要实现基本操作,而反转链表可以使用双指针法或递归策略。这些练习有助于深化对链表数据结构的理解。
摘要由CSDN通过智能技术生成

今天学习的是链表相关的问题,移除链表,设计链表和反转链表。

主要练习了一些常见的链表的基本操作。在练习的过程中加深对链表的认识。

如何定义一个链表元素,首先定义一个节点的元素,然后使指针指向下一个节点,没有插入链表时指向NULL。nullptr则表示指针指向NULL,它可能会有值。

struct ListNode {
    int val;  // 节点上存储的元素
    ListNode *next;  // 指向下一个节点的指针
    ListNode(int x) : val(x), next(NULL) {}  // 节点的构造函数
};

链表的增删,复杂度为O(1),不影响其它元素

1. 移除链表

链表的基本操作,有两种方法,其一是考虑是否删除头节点,在原链表上进行删除,另一种方法是定义一个指向头节点的虚拟头节点,再进行遍历删除,随后再将虚拟头节点指向的节点赋给头节点,这种方法不用考虑是否删除头节点。

题例 :203 链表删除

2. 设计链表

这道题是设计函数来实现链表的一些基本操作。题目的难度不大,但是具体实现起来需要思考的内容很多,很多地方容易出错,需要多加练习。

题例 :707 设计链表

3. 反转链表

这一题需要着重理解反转链表的过程。实际上反转链表只需要反转指针的方向就能实现。用一个链表的双指针法即可实现。值得注意的是,反转指针始终是一个指向链表元素的空指针,所以当遍历完链表后可以直接return反转指针。递归也是类似的思路。

题例:206 反转链表

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值