成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

我們一起學習刪除鏈表的節點

開發 前端
若 cur 指向某節點,則執行 pre.next = cur.next ;若 cur 指向 nullnull ,代表鏈表中不包含值為 val 的節點。

[[436875]]

本文轉載自微信公眾號「程序員千羽」,作者程序員千羽。轉載本文請聯系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 的節點分需為兩步:定位節點、修改引用。

  • 定位節點: 遍歷鏈表,直到 head.val == val 時跳出,即可定位目標節點。
  • 修改引用: 設節點 cur 的前驅節點為 pre ,后繼節點為 cur.next ;則執行 pre.next = cur.next ,即可實現刪除 cur 節點。

** 算法流程:**

  • 特例處理: 當應刪除頭節點 head 時,直接返回 head.next 即可。
  • 初始化: pre = head , cur = head.next 。
  • 定位節點: 當 cur 為空 或 cur 節點值等于 val 時跳出。
    • 保存當前節點索引,即 pre = cur 。
    • 遍歷下一節點,即 cur = cur.next 。
  • 刪除節點: 若 cur 指向某節點,則執行 pre.next = cur.next ;若 cur 指向 nullnull ,代表鏈表中不包含值為 val 的節點。
  • 返回值: 返回鏈表頭部節點 head 即可。

復雜度分析:

  • 時間復雜度 O(N): N為鏈表長度,刪除操作平均需循環 N/2 次,最差 N 次。
  • 空間復雜度 O(1) : cur, pre 占用常數大小額外空間。
  1. package com.nateshao.sword_offer.topic_15_deleteNode; 
  2.  
  3. /** 
  4.  * @date Created by 邵桐杰 on 2021/11/21 16:22 
  5.  * @微信公眾號 程序員千羽 
  6.  * @個人網站 www.nateshao.cn 
  7.  * @博客 https://nateshao.gitee.io 
  8.  * @GitHub https://github.com/nateshao 
  9.  * @Gitee https://gitee.com/nateshao 
  10.  * Description: 刪除鏈表的節點 
  11.  */ 
  12. public class Solution { 
  13.     public static void main(String[] args) { 
  14.         ListNode listNode = new ListNode(3); 
  15.         int val = 3; 
  16.         ListNode node = deleteNode(listNode, val); 
  17.         System.out.println("node = " + node); 
  18.     } 
  19.  // 推薦 
  20.     public static ListNode deleteNode(ListNode head, int val) { 
  21.         if (head.val == val) return head.next
  22.         ListNode pre = head, cur = head.next
  23.         while (cur != null && cur.val != val) { 
  24.             pre = cur; 
  25.             cur = cur.next
  26.         } 
  27.         if (cur != null) pre.next = cur.next
  28.         return head; 
  29.     } 
  30.  
  31.     public void deleteNode(ListNode head, ListNode deListNode) { 
  32.         if (deListNode == null || head == null
  33.             return
  34.         if (head == deListNode) { 
  35.             head = null
  36.         } else { 
  37.             // 若刪除節點是末尾節點,往后移一個 
  38.             if (deListNode.next == null) { 
  39.                 ListNode pointListNode = head; 
  40.                 while (pointListNode.next.next != null) { 
  41.                     pointListNode = pointListNode.next
  42.                 } 
  43.                 pointListNode.next = null
  44.             } else { 
  45.                 deListNode.val = deListNode.next.val; 
  46.                 deListNode.next = deListNode.next.next
  47.             } 
  48.         } 
  49.     } 
  50.  
  51.     /** 
  52.      * 單指針實現 
  53.      * 
  54.      * @param head 
  55.      * @param val 
  56.      * @return 
  57.      */ 
  58.     public ListNode deleteNode2(ListNode head, int val) { 
  59.         if (head == nullreturn null
  60.         if (head.val == val) return head.next
  61.         ListNode cur = head; 
  62.         while (cur.next != null && cur.next.val != val) { 
  63.             cur = cur.next
  64.         } 
  65.         if (cur.next != null) { 
  66.             cur.next = cur.next.next
  67.         } 
  68.         return head; 
  69.     } 
  70.  
  71.     /** 
  72.      * 遞歸實現 
  73.      * 
  74.      * @param head 
  75.      * @param val 
  76.      * @return 
  77.      */ 
  78.     public ListNode deleteNode3(ListNode head, int val) { 
  79.         if (head == nullreturn null
  80.         if (head.val == val) return head.next
  81.         else head.next = deleteNode3(head.next, val); 
  82.         return head; 
  83.     } 
  84.  
  85.     public static class ListNode { 
  86.         int val; 
  87.         ListNode next
  88.  
  89.         ListNode(int x) { 
  90.             val = x; 
  91.         } 
  92.     } 

參考鏈接: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

 

責任編輯:武曉燕 來源: 程序員千羽
相關推薦

2023-03-28 07:32:37

2021-05-19 10:37:16

WebFlux 前置工具

2022-02-14 10:16:22

Axios接口HTTP

2021-05-20 07:15:34

RSA-PSS算法簽名

2022-12-01 09:59:57

內核觀測性方法

2023-03-26 12:45:52

Linux內核頭文件

2021-10-11 10:25:33

排列nums數組

2021-03-18 00:04:13

C# 類型數據

2022-10-08 00:00:05

SQL機制結構

2017-01-22 15:09:08

架構閉環演進

2023-04-26 07:30:00

promptUI非結構化

2022-03-31 18:59:43

數據庫InnoDBMySQL

2023-08-10 08:28:46

網絡編程通信

2021-08-27 07:06:09

DubboDocker技術

2021-01-12 05:08:49

DHCP協議模型

2022-10-18 07:33:57

Maven構建工具

2023-08-04 08:20:56

DockerfileDocker工具

2023-06-30 08:18:51

敏捷開發模式

2022-05-24 08:21:16

數據安全API

2023-09-10 21:42:31

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕精品一区二区三区精品 | 美女黄网 | 国产不卡视频 | 国产精品久久久亚洲 | 国产高清自拍视频在线观看 | 伊人网在线综合 | 久草视频在线播放 | 亚洲第一天堂无码专区 | 男女午夜激情视频 | 欧美精品乱码久久久久久按摩 | av永久 | 能免费看的av | 91精品国产综合久久精品 | 日韩欧美天堂 | 成人黄视频在线观看 | 国产99久久精品 | 国产免费一区 | 久草免费在线 | 亚洲在线 | 亚洲欧美中文日韩在线v日本 | 一区二区久久 | 国产福利在线播放 | 九九九久久国产免费 | 热99精品视频 | 国产亚洲一区二区三区在线 | 精品一区二区在线观看 | 日韩精品在线看 | cao在线| 亚洲高清在线 | 99pao成人国产永久免费视频 | 国产精品亚洲综合 | av网址在线 | 精品久久久久久久人人人人传媒 | 亚洲午夜视频 | 天天夜干 | 国产精品久久久久久久久久三级 | 久久精品一区二区三区四区 | 久久综合国产 | 国产九九九| 久久久久网站 | 久久精品一区二区三区四区 |