栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

2021-10-01每日刷题打卡

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-10-01每日刷题打卡

2021-10-01每日刷题打卡 力扣——链表 92. 反转链表 II

给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。

示例 1:

输入:head = [1,2,3,4,5], left = 2, right = 4
输出:[1,4,3,2,5]

先遍历一遍把所有的结点存入vector容器,再设置两个指针,位置分别是left-1和right-;开始向中心移动,将遍历到的值交换,最后将所有结点穿起来。

class Solution {
public:
    ListNode* reverseBetween(ListNode* head, int left, int right) {
        if(head==NULL||head->next==NULL)
        {
            return head;
        }
        vectorv;
        ListNode* p;
        while(head!=NULL)
        {
            v.push_back(head);
            head=head->next;
        }
        int l=left-1,r=right-1;
        while(lnext=v[i];
            p=p->next;
        }
        p->next=NULL;
        return head;
    }
};
237. 删除链表中的节点

请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。

现有一个链表 – head = [4,5,1,9],它可以表示为:

示例 1:

输入:head = [4,5,1,9], node = 5
输出:[4,1,9]
解释:给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.

这题一开始想着就直接遍历一遍,整一个指针指向遍历的结点,遇到val和所给节点val相同的结点,就让指针直接指向下下个结点就好(直接跳过目标节点),但写了一半后发现这题没那么简单,它没有给你链表的头结点,只给了你要删除的结点,这样你就没法遍历了,而且咋删除这个结点也是个问题。后来经指点后发现,我不一定要杀了自己,我可以装成一个人的样子,然后把那个人杀了就行(吉良吉影点了个赞),于是直接把node的结点的下一个结点的val赋值给自己,再直接跳过那个节点就行,这样遍历下来,看起来就像是node被删除了一样。(虽然它还在)(这题细想后觉得有点吓人嘞)

class Solution {
public:
    void deleteNode(ListNode* node) {
        node->val=node->next->val;
        node->next=node->next->next;
    }
};
19. 删除链表的倒数第 N 个结点

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

进阶:你能尝试使用一趟扫描实现吗?

示例 1:

输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]

进阶说了,要我们只用一次遍历,所以不能用之前存进vector容器里的方法了,问题是不知道链表有多长,怎么知道第几个结点是倒数第n个,后来想到了用快慢指针的方法,设一个结点o,让这个结点的next指向head,再用两个结点p,q等于o,再设一个值num计算两个指针之间的结点,然后开始遍历,先让q向前移动,每移动一个结点判断两个指针之间的结点数即num是否大于n,如果大于,则p也向下移动一位,如果没有,则num++。这样当q指向null时(到达结尾),p的next指向的就是倒数第n个结点了,让p之间跳过下一个结点,最后返回o->next即可。

class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode* p,*q,*o;
        o=(ListNode*)malloc(sizeof(ListNode));
        o->next=head;
        p=o;
        q=o;
        int num=0;
        while(q!=NULL)
        {
            q=q->next;
            
            if(num>n)
            {
                p=p->next;
            }
            num++;
        }
        p->next=p->next->next;
        head=o->next;
        return head;
    }
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/290515.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号