剑指offer系列——剑指 Offer 18. 删除链表的节点(C语言)

⭐️前面的话⭐️

大家好!博主开辟了一个新的专栏——剑指offer,我要开始刷题了!这个专栏会介绍《剑指offer》书上所有的面试编程题。并且会分享一些我的刷题心得。由于博主水平有限,如有错误,欢迎指正,如果有更好的解题思路和算法可以分享给博主哦!一起加油!一起努力!

📒博客主页:未见花闻的博客主页
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📌本文由未见花闻原创,CSDN首发!
📆首发时间:🌴2021年9月6日🌴
✉️坚持和努力一定能换来诗与远方!
💭参考书籍:📚《剑指offer第1版》,📚《剑指offer第2版》
💬参考在线编程网站:🌐牛客网🌐力扣
🙏作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!
博主的码云gitee,平常博主写的程序代码都在里面。


⭐️剑指 Offer 18. 删除链表的节点⭐️

🔐题目详情

给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
返回删除后的链表的头节点。
注意:此题对比原题有改动

示例:

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

限制:

题目保证链表中节点的值互不相同
若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shan-chu-lian-biao-de-jie-dian-lcof

💡解题思路

方法: 双指针。
使用双指针的方法,这道题可以分为两种情况,第一种情况,当链表第一个元素就是需要删除的元素时,直接将头结点删除。第二种情况,当链表的第一个元素不是需要删除的元素时,定义结点cur,用来比较其对应的值是否与需要删除的值val相等(这道题不会出现重复元素),另一个结点prev用来储存cur的上一个结点,如果cur->val == val,就将cur的前一个结点的next指向cur结点的next,以删除cur结点。
1

时间复杂度: O(N)
空间复杂度: O(1)

🔑源代码

编程语言:C语言
在线编程平台:力扣

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* deleteNode(struct ListNode* head, int val){
    if (head == NULL)
        return NULL;

    struct ListNode* cur = head;
    struct ListNode* prev = head;
    
    if (head->val == val)
    {
        head = head->next;
        return head;//需要删除的结点为链表第一个元素
    }

    while (cur)
    {
        if (cur->val == val)
        {
            prev->next = cur->next;
            break;//需要删除的结点不为链表第一个元素
        }
        prev = cur;
        cur = cur->next;
    }
    return head;
}

🌱总结

对与无重复元素链表元素的删除,可以分情况采用双指针的方法删除目标结点。

觉得文章写得不错的老铁们,点赞评论关注走一波!谢谢啦!
  • 58
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 35
    评论
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未见花闻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值