跳转至

18.删除链表的结点 (Easy)*

题目描述*

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

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

示例*

输入: head = [4,5,1,9], val = 5

输出: [4,1,9]

输入: head = [4,5,1,9], val = 1

输出: [4,5,9]

代码*

这个题是给出要删除的值,所以只能遍历。

原书的题目是给定了要删除的结点,那我们就可以用 O(1) 时间删除,以后继结点替代当前结点,要删除尾结点时才需要从头遍历。

class Solution {
public:
    ListNode* deleteNode(ListNode* head, int val) {
        ListNode *newHead = new ListNode(-1);
        newHead->next = head;
        ListNode *p = newHead;
        while(p->next != nullptr) {
            if(p->next->val == val) {
                p->next = p->next->next;
                break;
            }
            p = p->next;
        }
        return newHead->next;
    }
};

最后更新: July 23, 2022