考研生活day2--王道课后习题2.3.1、2.3.2、2.3.3

news/2024/7/8 15:30:51 标签: 考研, 生活

2.3.1

题目描述:

这题和曾经做过的LeetCode203.移除元素一模一样,所以我们就使用LeetCode进行书写,题目链接203. 移除链表元素 - 力扣(LeetCode)

解题思路

·大家的第一反应肯定是根据书上所学的书写方法一样书写,但是书上有一种情况没有说明,那就是如果要删除的节点是头节点该如何处理,这里我们就要考虑到头结点是如何处理的

·处理头节点可以直接对链表操作,也可以使用其他方法处理,在这里我提供一个方法,就是使用虚拟头结点对头结点操作,也就是在链表头结点前定义一个虚拟头结点,这样就可以把头结点当作普通节点进行处理了

·大家可能不明白我我说的意思,可以直接看代码,就可以理解了

代码如下:

class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        ListNode* dummyHead = new ListNode(0);//定义一个虚拟节点值为0
        dummyHead->next = head;//虚拟头结点指向链表头结点
        ListNode* cur = dummyHead;//定义临时节点用于遍历链表
        while(cur->next != NULL){
            if(cur->next->val == val){//书上的删除节点操作
                ListNode* tmp = cur->next;
                cur->next = cur->next->next;
                delete tmp;
            }else{
                cur = cur->next;
            }
        }
        head = dummyHead->next;
        delete dummyHead;//删除虚拟头结点
        return head;
    }
};

2.3.2

题目描述

解题思路

1.我们在链表的操作中,一定要记下被操作元素的前驱结点,而后继节点可以很轻易的得到

2.这道题和上一题没有什么本质上的区别,我们只需要再定义一个minn变量,用于记录下当前最小节点的前驱即可

3.所以我们只需要不断的比较cur->next就可以了

4.再用一个临时节点temp用于记录cur->next即可

代码如下:

#include <iostream>
using namespace std;

typedef struct LNode
{
    int data;
    struct LNode* next;
} LNode, * LinkList;

// 头插法
void HeadInsert(LinkList& L)
{
    int val = 0;
    while (cin >> val)
    {
        LNode* s = new LNode;
        s->data = val;
        s->next = L->next;
        L->next = s;

        if (cin.get() == '\n')
        {
            break;
        }
    }
}

// 尾插法
void TailInsert(LinkList& L)
{
    int val = 0;
    LNode* r = L;
    while (cin >> val)
    {
        LNode* s = new LNode;
        s->data = val;
        r->next = s;
        r = s;
        r->next = NULL;

        if (cin.get() == '\n')
        {
            break;
        }
    }
}

// 遍历输出链表元素
void Print(LinkList L)
{
    LNode* p = L->next;
    while (p)
    {
        cout << p->data << '\t';
        p = p->next;
    }
    cout << endl;
}


void DelMinValue(LinkList& L) {
    LNode* p, * pre;
    p = L->next, pre = L;

    LNode* minp, * minpre;
    minp = p; minpre = pre;

    while (p) {
        if (p->data < minp->data) {
            minpre = pre;
            minp = p;
        }
        pre = p;
        p = p->next;
    }
    minpre->next = minp->next;
    delete minp;
}


int main()
{
    LinkList L = new LNode;
    TailInsert(L);

    DelMinValue(L);
    Print(L);
}

运行结果


2.3.3

这道题也与LeetCode206.反转链表一致,继续使用LeetCode进行学习206. 反转链表 - 力扣(LeetCode)

解题思路

1.可以重新定义一个链表,将第一个链表中的元素取出后,再放入新建的链表中,即可实现,这个方法同样也可以借助栈进行求解

2.可以考虑使用双指针法,不理解双指针法的同学可以不考虑使用这个方法

代码如下

双指针法

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* temp;//保存cur的下一个节点
        ListNode* cur = head;
        ListNode* pre = NULL;
        while(cur){
            temp = cur->next;// 保存一下,cur的下一个节点,因为要改变cur->next
            cur->next = pre;//进行翻转操作
            //更新pre和cur指针
            pre = cur;
            cur = temp;
        }
        return pre;
    }
};

http://www.niftyadmin.cn/n/5537333.html

相关文章

Python pyecharts 模块

pyecharts 是一个基于 ECharts.js 的 Python 可视化库&#xff0c;用于生成各种类型的交互式图表和数据可视化。它支持多种常见的图表类型&#xff0c;如折线图、柱状图、散点图、饼图等&#xff0c;可以在 Web 页面中呈现&#xff0c;并且具有丰富的配置选项和样式定制能力。 …

以太网协议介绍——UDP

注&#xff1a;需要先了解一些以太网的背景知识&#xff0c;方便更好理解UDP协议、 以太网基础知识一 以太网基础知识二 UDP协议 UDP即用户数据报协议&#xff0c;是一种面向无连接的传输层协议&#xff0c;属于 TCP/IP 协议簇的一种。UDP具有消耗资源少、通信效率高等优点&a…

昇思25天学习打卡营第16天 | DCGAN生成漫画头像

这两天把minspore配置到我的电脑上了&#xff0c;然后运行就没什么问题了✨&#x1f60a; 今天学这个DCGAN生成漫画头像&#xff0c;我超级感兴趣的嘞&#x1f984;&#x1f970; GAN基础原理 这部分原理介绍参考GAN图像生成。 DCGAN原理 DCGAN&#xff08;深度卷积对抗生成…

一个开源的、独立的、可自托管的评论系统,专为现代Web平台设计

大家好&#xff0c;今天给大家分享的是一个开源的、独立的、可自托管的评论系统&#xff0c;专为现代Web平台设计。 Remark42是一个自托管的、轻量级的、简单的&#xff08;但功能强大的&#xff09;评论引擎&#xff0c;它不会监视用户。它可以嵌入到博客、文章或任何其他读者…

nuxt3搭建和部署

Nuxt 3是一个基于Vue 3的静态网站生成框架&#xff0c;它提供了高性能、SEO友好的Web应用程序开发体验。Nuxt 3重写了许多核心代码&#xff0c;增加了新功能&#xff0c;如基于Vite的构建系统、改进的路由系统、数据获取和插件系统。它支持TypeScript和多种渲染模式&#xff08…

海量设备集中运维,向日葵远程控制赋能农牧产品加工产业链

产业规模越大&#xff0c;单位成本就越低&#xff0c;这是一个广泛存在的商业规律。 在诸多行业中&#xff0c;农牧业的这种“规模效应”尤为明显&#xff0c;这使得在农牧行业内逐渐发展出许多横跨产业链上下游的大型企业集团&#xff0c;业务甚至覆盖相关产业设备的设计与生…

js使用websocket,vue使用websocket,copy即用

新建一个文件 websocket.js // 定义websocket 地址 let socketurlDev "ws://192.000.0.0:8085/websocket/admin/"; //开发环境 let socketurlProd "wss://123456789.cn/prod-api/websocket/admin/"; //正式环境// 重连锁, 防止过多重连 let reconnectLo…

qt 关于大端小端的一个实验 简单实验

1.概要 起因我用滚动是x86电脑&#xff0c;我用一个usort a11a ,我期待转换长的char字符应该是这样的“1aa1”,因为x86是小端的&#xff0c;这也是这个16位 类型的实际内存顺序&#xff0c;但是输出的结果是 “a11a”&#xff0c;难道这环境不是小端&#xff1f;难道qt能智能…