Skip to content
本页目录

18-删除链表的节点

题目描述

https://leetcode.cn/problems/shan-chu-lian-biao-de-jie-dian-lcof

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

示例 1:

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

示例 2:

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

说明:

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

思路分析

需要考虑第一个节点,或者最后一个节点的情况 给节点添加一个 dummyHead 指向它 然后遍历指针,遇到需要删除的节点,则将 cur.next 指向 cur.next.next; 最后返回 dummyHead.next

dummyHead 的方法可以经常使用在这种情况用于处理首节点和空节点等情况

实现代码

csharp
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public int val;
 *     public ListNode next;
 *     public ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode DeleteNode(ListNode head, int val) {
        ListNode dummyHead = new ListNode();
        dummyHead.next = head;
        ListNode cur = dummyHead;
        while(cur.next != null){
            if(cur.next.val == val){
                cur.next = cur.next.next;
                break;
            }
            cur = cur.next;
        }
        return dummyHead.next;
    }
}

Released under the MIT License.