【代码随想录刷题记录】 203.移除链表元素 、 707.设计链表 、206.反转链表

这篇具有很好参考价值的文章主要介绍了【代码随想录刷题记录】 203.移除链表元素 、 707.设计链表 、206.反转链表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

203 移除链表元素

  1. 题目
    给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
    题目链接:https://leetcode.cn/problems/remove-linked-list-elements/
  2. 代码
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        ListNode* p;//p用于遍历,q用于释放 
        p = head;
        while(p != NULL && p -> next != NULL){
            ListNode* q;
            q = p -> next;
            if(q->val == val){
                p->next =q->next;
                delete q;
            }  
            else{
                p = p -> next;
            } 
        }
        //头结点存在且为VAL的情况
        if( head != NULL && head-> val == val){
            ListNode* q;
            q = head;
            head = head->next;
            delete q;
        }
        return head;
    }
};
  1. 小结
    该题主要注意链表删除的操作以及在特殊情况下如何进行操作。特殊情况包括头结点为目标值,该链表为空的情况,尾结点为目标值。为了方便统一操作,可以使用虚拟头结点的方法。

707 设计链表

  1. 题目
    你可以选择使用单链表或者双链表,设计并实现自己的链表。
    单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。
    如果是双向链表,则还需要属性 prev 以指示链表中的上一个节点。假设链表中的所有节点下标从 0 开始。
    实现 MyLinkedList 类:
    MyLinkedList() 初始化 MyLinkedList 对象。
    int get(int index) 获取链表中下标为 index 的节点的值。如果下标无效,则返回 -1 。
    void addAtHead(int val) 将一个值为 val 的节点插入到链表中第一个元素之前。在插入完成后,新节点会成为链表的第一个节点。
    void addAtTail(int val) 将一个值为 val 的节点追加到链表中作为链表的最后一个元素。
    void addAtIndex(int index, int val) 将一个值为 val 的节点插入到链表中下标为 index 的节点之前。如果 index 等于链表的长度,那么该节点会被追加到链表的末尾。如果 index 比长度更大,该节点将 不会插入 到链表中。
    void deleteAtIndex(int index) 如果下标有效,则删除链表中下标为 index 的节点。
    题目链接:https://leetcode.cn/problems/design-linked-list/

  2. 代码文章来源地址https://www.toymoban.com/news/detail-473801.html

class MyLinkedList {

public:
// 定义链表节点结构体
    struct ListNode {
        int val;
        ListNode* next;
        ListNode(int val):val(val), next(nullptr){}
    };

    MyLinkedList() {
        _head = new ListNode(0);
        _size = 0;
    }
    int get(int index) {//inde包括头结点吗
        if(index > _size - 1 || index < 0){
            return -1;
        }
        int i;
        ListNode* p = _head -> next;
        for(i = 0;i < index ;i++){
                 p = p -> next;
        }
         return p -> val;
    }
    
    void addAtHead(int val) {
        ListNode *newnode = new ListNode(val);
        newnode -> next = _head -> next;
        _head -> next = newnode;
        _size++;//不能少;
    }
    
    void addAtTail(int val) {
        ListNode *newnode = new ListNode(val);
        ListNode *p = _head; 
        while(p -> next != NULL){
            p = p -> next;
        }
        p -> next = newnode;
        _size++;
    }
    
    void addAtIndex(int index, int val) {
        //index比链表长
        if(index > _size ) return;
        if(index < 0) index = 0;
        ListNode *newnode = new ListNode(val);
        ListNode *p = _head;
        for(int i = 0;i < index  ;i++){
            p = p -> next;
        }
        newnode -> next = p -> next;
        p -> next = newnode;
        _size++;

    }
    
    void deleteAtIndex(int index) {
        if(index >=  _size  || index < 0) return;
        ListNode *p = _head;
        ListNode *q;
         for(int i = 0;i < index  ;i++){
                 p = p -> next;
         }
            q  = p -> next;
            p -> next = q -> next;
            delete q;
            _size--;
    }   

 private:
    int _size;
    ListNode* _head;   
};
  1. 小结
    在设计过程中需要注意index是从0开始还是1开始,根据index的不同规定确定边界条件的值,并且需要熟悉c++中类的编写。

206 反转链表

  1. 题目
    给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
    题目链接:https://leetcode.cn/problems/reverse-linked-list/
  2. 代码
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        if(head == nullptr) return head;//空链表情况
        ListNode *pre = nullptr;
        ListNode *p = head ;
        ListNode *nexp = p -> next;
        while(p != nullptr && p-> next != nullptr){
            p -> next = pre;
            pre = p;
            p = nexp;
            nexp = p -> next;
        }
        p -> next = pre;
        head  = p;
        return head;
    }
};
  1. 小结
    需要注意该链表是否包含头结点,在本题目中链表不包含头结点,故需要单独考虑head==nullptr的情况。需要注意头结点和尾结点的反转情况,根据不同情况考虑是否需要单独写一段代码。

到了这里,关于【代码随想录刷题记录】 203.移除链表元素 、 707.设计链表 、206.反转链表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 代码随想录day3 | 203.移除链表元素 707.设计链表 206.反转链表

    直接让前一个节点指向后一个节点即可 两种方法 第一种:直接删除 第二种:头删的时候,直接 head=head-next 其实这两种方法都没有做到统一 第三种:虚拟头结点法 这样的话,咱们删除的时候,就是以统一的规则来进行删除啦! 203.移除链表元素 法一:原始删除法 1、while(h

    2024年02月16日
    浏览(40)
  • 代码随想录Day3|链表理论基础|203.移除链表元素|707.设计链表|206.反转链表

    虽然以前写过一次链表,但是真的已经忘得一干二净了 链表 :通过 指针 串联在一起的线性结构,每个 节点 都由数据域和指针域组成。 指针域 :存放下一个节点的指针,最后一个节点的指针域指向null,也即空指针 head :链表的入口节点,也即链表的头节点 链表的类型 单

    2024年02月11日
    浏览(54)
  • 代码随想录第三天|链表理论基础,LeetCode203.移除链表元素, LeetCode707.设计链表,LeetCode 206.反转链表

    链表: 链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。 链表的入口节点称为链表的头结点也就是head。 链表类型: 1.单链表 单链表中的指

    2024年02月11日
    浏览(53)
  • 代码随想录day3|链表理论基础、移除链表元素、设计链表、翻转链表

    1、基本类型:单链表、双链表、循环链表 2、存储方式:和数组不一样,链表是随机存储在内存中,不是连续分配在内存中。 3、链表的定义: 定义了一个数据域,还有一个指针域,并且定义了一个构造函数。 4、链表的操作: 删除节点:  在图中,若需要删除D这个节点,只

    2024年02月05日
    浏览(46)
  • 【代码随想录刷题记录】 392.判断子序列 、 115.不同的子序列

    1、题目 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,\\\"ace\\\"是\\\"abcde\\\"的一个子序列,而\\\"aec\\\"不是)。 题目链接:https://leetcode.cn/problems/is-subsequence/ 2、代码

    2024年02月16日
    浏览(44)
  • 代码随想录Day3 | 链表01-leetcode203、707、206

    题目链接:移除链表元素 思路: 链表中元素的添加和删除关键是要 保证不断链且指向关系正确 。对于删除操作,链的修改涉及将待删除元素的前一个元素指向待删除元素的后一个元素,因此在判断当前元素是否需要删除时,要记录当前元素的前后指针。 1.删除头结点时另作

    2024年02月16日
    浏览(68)
  • 【代码随想录-Leetcode第二题:27.移除元素】

    给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的 样例:示例 1: 解释:函数

    2024年02月14日
    浏览(51)
  • 代码随想录Python:704. 二分查找,27. 移除元素

    数组是非常基础的数据结构。 数组是存放在连续内存空间上的相同类型数据的集合。 题目: 给定一个  n  个元素有序的(升序)整型数组  nums  和一个目标值  target   ,写一个函数搜索  nums  中的  target ,如果目标值存在返回下标,否则返回  -1 。 题目链接:. - 力扣

    2024年02月13日
    浏览(53)
  • 代码随想录刷题

    704. 二分查找 27. 移除元素

    2024年01月25日
    浏览(50)
  • 代码随想录day1 | 704.二分查找 27.移除元素

    1、循环变量 2、判断条件 当时左闭右闭时,while循环里面的条件,我们可以先假设,有等号即有left=right的情况,例如[1,1]这个区间,那么循环是要进入里面的,所以要取得等号。 判断的时候,nums[mid]tar,那么必然tar不在右半区间,所以right=mid-1 nums[mid]tar,那么必然tar不在左半

    2024年02月15日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包