链表|19.删除链表的倒数第N个节点

本文讲述了如何使用快慢指针解决链表中删除倒数第n个元素的问题,强调了动态内存分配的理解、题意清晰以及链表操作实践的重要性。

力扣题目链接

struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {
    //定义虚拟头节点dummy 并初始化使其指向head
    struct ListNode* dummy = malloc(sizeof(struct ListNode));
    dummy->val = 0;
    dummy->next = head;
    //定义 fast slow 双指针
    struct ListNode* fast = head;
    struct ListNode* slow = dummy;

    for (int i = 0; i < n; ++i) {
        fast = fast->next;
    }
    while (fast) {
        fast = fast->next;
        slow = slow->next;
    }
    slow->next = slow->next->next;//删除倒数第n个节点
    head = dummy->next;
    free(dummy);//删除虚拟节点dummy
    return head;
}

这个题主要不太明白倒数第n个元素的n的意思。

代码里的n我一直理解的像是顺数的第n个元素呜呜呜

自己独立敲一下,突然就明白了n的意思了。 

一、出错点

1.内存分配语法,知识点掌握不牢固。

2.关于n的意思理解不清楚

3.未释放虚拟节点dummy

二、理解后的思路

1.创建虚拟头节点

2.定义头节点,创建快慢指针

3.删除倒数第n个元素。即快慢指针相隔n个元素来计算删除倒数第n个元素,移动快指针n格

4.一起移动快慢指针,直到快指针指向null,删除慢指针下一个所指元素

5.释放虚拟节点,返回修改后的链表

三、总结

加强对动态内存分配的理解,多敲代码,理解清楚题意。

多看看链表相关的代码!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值