• 【LeetCode-链表】删除链表的节点


    题目描述

    给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。

    返回删除后的链表的头节点。

    注意: 此题对比原题有改动
    示例:

    输入: 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 被删除的节点;
    • 该题是《剑指Offer》第 18 题;

    题目链接: https://leetcode-cn.com/problems/shan-chu-lian-biao-de-jie-dian-lcof/

    思路

    这题主要注意删除的可能是第一个节点,所以要设置一个哑结点(dummyNode)作为新的链表头,指向原来的链表头。代码如下:

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* deleteNode(ListNode* head, int val) {
            if(head==nullptr) return nullptr;
    
            ListNode* dummy = new ListNode(0);
            dummy->next = head;
            ListNode* cur = dummy;
            while(cur->next!=nullptr){
                if(cur->next->val==val){
                    cur->next = cur->next->next;
                    break;
                }else cur = cur->next;
            }
            return dummy->next;
        }
    };
    

    这样写也行:

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* deleteNode(ListNode* head, int val) {
            if(head==NULL) return NULL;
    
            ListNode* dummy = new ListNode(0);
            dummy->next = head;
            ListNode* cur = dummy;
            while(cur!=NULL && cur->next->val!=val){
                cur = cur->next;
            }
            cur->next = cur->next->next;
            return dummy->next;
        }
    };
    
    • 时间复杂度:O(n)
    • 空间复杂度:O(1)
  • 相关阅读:
    Nginx负载均衡+代理+ssl+压力测试
    Nginx配置文件详解
    HDU ACM 1690 Bus System (SPFA)
    HDU ACM 1224 Free DIY Tour (SPFA)
    HDU ACM 1869 六度分离(Floyd)
    HDU ACM 2066 一个人的旅行
    HDU ACM 3790 最短路径问题
    HDU ACM 1879 继续畅通工程
    HDU ACM 1856 More is better(并查集)
    HDU ACM 1325 / POJ 1308 Is It A Tree?
  • 原文地址:https://www.cnblogs.com/flix/p/13368263.html
Copyright © 2020-2023  润新知