C++小白修仙记_LeetCode刷题_链表

字符串(难度:easy)

203. 移除链表元素

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

示例

alt text
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]

解法:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        ListNode* dummy = new ListNode();//虚拟头节点
        dummy->next = head;//防止第一个节点val符合要求,将dummy作为哨兵节点
        ListNode* cur = dummy;
        while(cur->next != nullptr)
        {
            if(cur->next->val == val){
                ListNode* toDelete = cur->next;
                cur->next = toDelete->next;
                delete toDelete;
            }else{
                cur = cur->next;
            }
        }
        return dummy->next;
    }
};

237. 删除链表中的节点

有一个单链表的 head,我们想删除它其中的一个节点 node。

给你一个需要删除的节点 node 。你将 无法访问 第一个节点 head。

链表的所有值都是 唯一的,并且保证给定的节点 node 不是链表中的最后一个节点。

删除给定的节点。注意,删除节点并不是指从内存中删除它。这里的意思是:

给定节点的值不应该存在于链表中。
链表中的节点数应该减少 1。
node 前面的所有值顺序相同。
node 后面的所有值顺序相同。
自定义测试:

对于输入,你应该提供整个链表 head 和要给出的节点 node。node 不应该是链表的最后一个节点,而应该是链表中的一个实际节点。
我们将构建链表,并将节点传递给你的函数。
输出将是调用你函数后的整个链表。

示例
alt text
输入:head = [4,5,1,9], node = 5

输出:[4,1,9]

解释:指定链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9

解法:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    void deleteNode(ListNode* node) {
        ListNode* temp = node->next;
        // 复制 node.next 到 node
        node->val = node->next->val;
        node->next = node->next->next;
        // 从链表中删除 node.next
        delete temp;
    }
};
posted @ 2025-08-27 22:13  Jaylan  阅读(9)  评论(0)    收藏  举报