Leetcode-每日一题【剑指 Offer 18. 删除链表的节点】

题目

 

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

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

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

示例 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 被删除的节点

解题思路

1.题目要求我们定义一个函数删除给定节点。返回删除后的链表的头节点。

2.首先我们需要定义一个虚拟头节点,为了方便的删除头节点。让头节点dummy的next指向head。然后我们处理特殊情况判断链表是否为null,若链表为 null,我们直接返回 null。之后我们设置一个指针 temp 去遍历链表,若 temp.next.val != val 我们就让 temp = temp.next ,这么做是为了让 temp 找到目标节点的前一个节点,方便我们进行删除操作。当找到目标节点后我们就让  temp.next = temp.next.next ,删除目标节点,最后返回 dummy.next即可。

代码实现

class Solution {
    public ListNode deleteNode(ListNode head, int val) {
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        ListNode temp = dummy;
        if(head == null ){
            return null;
        }

        while(temp.next.val != val){
            temp = temp.next;
        }
        temp.next = temp.next.next;
        return dummy.next;

    }
}

测试结果

Leetcode-每日一题【剑指 Offer 18. 删除链表的节点】_第1张图片

你可能感兴趣的:(leetcode,算法,职场和发展,java)