文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

我们一起学习删除链表的节点

2024-12-02 16:31

关注

本文转载自微信公众号「程序员千羽」,作者程序员千羽。转载本文请联系J程序员千羽公众号。

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

“GitHub : https://gitee.com/nateshao/leetcode/blob/main/algo-notes/src/main/java/com/nateshao/sword_offer/topic_12_hammingWeight/Solution.java

删除链表的节点

“题目描述: 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。示例 1:

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

示例 2:

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

解题思路:

本题删除值为 val 的节点分需为两步:定位节点、修改引用。

** 算法流程:**

复杂度分析:

  1. package com.nateshao.sword_offer.topic_15_deleteNode; 
  2.  
  3.  
  4. public class Solution { 
  5.     public static void main(String[] args) { 
  6.         ListNode listNode = new ListNode(3); 
  7.         int val = 3; 
  8.         ListNode node = deleteNode(listNode, val); 
  9.         System.out.println("node = " + node); 
  10.     } 
  11.  // 推荐 
  12.     public static ListNode deleteNode(ListNode head, int val) { 
  13.         if (head.val == val) return head.next
  14.         ListNode pre = head, cur = head.next
  15.         while (cur != null && cur.val != val) { 
  16.             pre = cur; 
  17.             cur = cur.next
  18.         } 
  19.         if (cur != null) pre.next = cur.next
  20.         return head; 
  21.     } 
  22.  
  23.     public void deleteNode(ListNode head, ListNode deListNode) { 
  24.         if (deListNode == null || head == null
  25.             return
  26.         if (head == deListNode) { 
  27.             head = null
  28.         } else { 
  29.             // 若删除节点是末尾节点,往后移一个 
  30.             if (deListNode.next == null) { 
  31.                 ListNode pointListNode = head; 
  32.                 while (pointListNode.next.next != null) { 
  33.                     pointListNode = pointListNode.next
  34.                 } 
  35.                 pointListNode.next = null
  36.             } else { 
  37.                 deListNode.val = deListNode.next.val; 
  38.                 deListNode.next = deListNode.next.next
  39.             } 
  40.         } 
  41.     } 
  42.  
  43.      
  44.     public ListNode deleteNode2(ListNode head, int val) { 
  45.         if (head == nullreturn null
  46.         if (head.val == val) return head.next
  47.         ListNode cur = head; 
  48.         while (cur.next != null && cur.next.val != val) { 
  49.             cur = cur.next
  50.         } 
  51.         if (cur.next != null) { 
  52.             cur.next = cur.next.next
  53.         } 
  54.         return head; 
  55.     } 
  56.  
  57.      
  58.     public ListNode deleteNode3(ListNode head, int val) { 
  59.         if (head == nullreturn null
  60.         if (head.val == val) return head.next
  61.         else head.next = deleteNode3(head.next, val); 
  62.         return head; 
  63.     } 
  64.  
  65.     public static class ListNode { 
  66.         int val; 
  67.         ListNode next
  68.  
  69.         ListNode(int x) { 
  70.             val = x; 
  71.         } 
  72.     } 

参考链接:https://leetcode-cn.com/problems/shan-chu-lian-biao-de-jie-dian-lcof/solution/mian-shi-ti-18-shan-chu-lian-biao-de-jie-dian-sh-2

 

来源:程序员千羽内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯