剑指Offer LeetCode 面试题18. 删除链表的节点

简介: 剑指Offer LeetCode 面试题18. 删除链表的节点

面试题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 被删除的节点

思路

双指针 解题代码

class Solution {
    public static ListNode deleteNode(ListNode head, int val) {
        if(head.val==val){  //先判断是不是等于第一个元素的数据,如果是直接返回head.next即可
            return head.next;
        }
        ListNode a=head,b=head.next;//定义双指针
        while (b!=null){
            if(b.val==val){//如果找到了,就跳过这个数据,截断它
                a.next=b.next;
            }
            a=a.next;
            b=b.next;
        }
        return head;
    }
    public static void main(String[] args) {
        ListNode l1 = new ListNode(1);
        ListNode l2 = new ListNode(3);
        ListNode l3 = new ListNode(2);
        //https://leetcode-cn.com/problems/shan-chu-lian-biao-de-jie-dian-lcof/
        l1.next=l2;
        l2.next=l3;
        ListNode listNode = deleteNode(l1, 2);
        while (listNode!=null){
            System.out.println(listNode.val);
            listNode=listNode.next;
        }
    }
}
class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}

单指针

public static ListNode deleteNode(ListNode head, int val) {
        if(head.val==val){  //先判断是不是等于第一个元素的数据,如果是直接返回head.next即可
            return head.next;
        }
        ListNode a=head;//定义指针
        while (a.next.val!=val){
            a=a.next;
        }
        //截断
        a.next = a.next.next;
        return head;
    }


目录
打赏
0
0
0
0
4
分享
相关文章
|
5月前
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
55 0
LeetCode第二十四题(两两交换链表中的节点)
|
5月前
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第19题要求删除链表的倒数第N个节点,可以通过快慢指针法在一次遍历中实现。
63 0
Leetcode第十九题(删除链表的倒数第N个节点)
05_删除链表的倒数第N个节点
05_删除链表的倒数第N个节点
|
5月前
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
75 0
LeetCode第24题两两交换链表中的节点
这篇文章介绍了LeetCode第24题"两两交换链表中的节点"的解题方法,通过使用虚拟节点和前驱节点技巧,实现了链表中相邻节点的交换。
LeetCode第24题两两交换链表中的节点
HashMap常见面试题(超全面):实现原理、扩容机制、链表何时升级为红黑树、死循环
HashMap常见面试题:红黑树、散列表,HashMap实现原理、扩容机制,HashMap的jd1.7与jdk1.8有什么区别,寻址算法、链表何时升级为红黑树、死循环
04_两两交换链表中的节点
04_两两交换链表中的节点
|
7月前
|
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
78 5
【面试题】合井K个升序链表
【面试题】合井K个升序链表
46 0
【Java集合类面试十】、HashMap中的循环链表是如何产生的?
在多线程环境下,HashMap在扩容时如果发生条件竞争,元素的插入顺序可能形成循环链表,导致死循环。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等