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

LeetCode

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

LeetCode

目录

一、题目

二、思路图解

1.找结点

2.没有结点的情况

3.第一个结点

4.其它个结点

三、代码实现


一、题目

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

如下图:(来自LeetCode刷题网)

二、思路图解

1.找结点

题目给出的单链表的题型:他要求我们删除倒数第N个结点,但是单链表的特性是无法进行反向遍历的,所以我们只能通过正向遍历来找到我们所需要删除的结点,将问题从删除倒数第N个结点转化为删除正数第N个结点。

2.没有结点的情况

如果链表是一个空结点、没有可以删除的结点直接返回NULL。

3.第一个结点

当待删除的结点为链表的第一个结点时,即会发生头删。

如图解:先记录头结点的下一个结点,然后再将头指针指向这个结点,再将原头结点空间释放。

 if (head == NULL)//如果链表是空
    {
        return NULL;
    }
    //这个链表的结点个数
    int sz = 0;
    ListNode* phead = head;
    while (phead)
    {
        sz++;
        phead = phead->next;
    }
    //正数的个数
    sz = sz - n + 1;
    //删除这个结点,记录前后结点
    ListNode* cur = head;
    ListNode* prev = head;
    ListNode* next = cur->next;
    phead = head;
    //头删情况
    if (sz == 1)
    {
        phead = next;
        free(cur);

        return phead;
    }

4.其它个结点

如果删除的结点不是第一个结点,我们需要先找到这个结点。

 如图解:记录cur待删除结点的前一个结点prev和后一个结点next, 将prev 链接到 next, 再将cur结点删除就可以了。

        //找到这个节点
        sz -= 1;
        while (sz)
        {
            prev = cur;
            cur = next;
            next = cur->next;
            sz--;
        }

        prev->next = next;
        free(cur);

三、代码实现
typedef struct ListNode ListNode;
struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {
    if (head == NULL)
    {
        return NULL;
    }
    //这个链表的结点个数
    int sz = 0;
    ListNode* phead = head;
    while (phead)
    {
        sz++;
        phead = phead->next;
    }
    //正数的个数
    sz = sz - n + 1;
    //删除这个结点,记录前后结点
    ListNode* cur = head;
    ListNode* prev = head;
    ListNode* next = cur->next;
    phead = head;
    //头删情况
    if (sz == 1)
    {
        phead = next;
        free(cur);

        return phead;
    }
    else
    {
        //找到这个节点
        sz -= 1;
        while (sz)
        {
            prev = cur;
            cur = next;
            next = cur->next;
            sz--;
        }

        prev->next = next;
        free(cur);

        return phead;
    }

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/769398.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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