自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

我們一起學(xué)習(xí)刪除鏈表的節(jié)點(diǎn)

開發(fā) 前端
若 cur 指向某節(jié)點(diǎn),則執(zhí)行 pre.next = cur.next ;若 cur 指向 nullnull ,代表鏈表中不包含值為 val 的節(jié)點(diǎn)。

[[436875]]

本文轉(zhuǎn)載自微信公眾號「程序員千羽」,作者程序員千羽。轉(zhuǎn)載本文請聯(lián)系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

刪除鏈表的節(jié)點(diǎn)

“題目描述: 給定單向鏈表的頭指針和一個(gè)要刪除的節(jié)點(diǎn)的值,定義一個(gè)函數(shù)刪除該節(jié)點(diǎn)。返回刪除后的鏈表的頭節(jié)點(diǎn)。示例 1:

  1. 輸入: head = [4,5,1,9], val = 5 
  2. 輸出: [4,1,9] 
  3. 解釋: 給定你鏈表中值為 5 的第二個(gè)節(jié)點(diǎn),那么在調(diào)用了你的函數(shù)之后,該鏈表應(yīng)變?yōu)?nbsp;4 -> 1 -> 9. 

示例 2:

  1. 輸入: head = [4,5,1,9], val = 1 
  2. 輸出: [4,5,9] 
  3. 解釋: 給定你鏈表中值為 1 的第三個(gè)節(jié)點(diǎn),那么在調(diào)用了你的函數(shù)之后,該鏈表應(yīng)變?yōu)?nbsp;4 -> 5 -> 9. 

解題思路:

本題刪除值為 val 的節(jié)點(diǎn)分需為兩步:定位節(jié)點(diǎn)、修改引用。

  • 定位節(jié)點(diǎn): 遍歷鏈表,直到 head.val == val 時(shí)跳出,即可定位目標(biāo)節(jié)點(diǎn)。
  • 修改引用: 設(shè)節(jié)點(diǎn) cur 的前驅(qū)節(jié)點(diǎn)為 pre ,后繼節(jié)點(diǎn)為 cur.next ;則執(zhí)行 pre.next = cur.next ,即可實(shí)現(xiàn)刪除 cur 節(jié)點(diǎn)。

** 算法流程:**

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

復(fù)雜度分析:

  • 時(shí)間復(fù)雜度 O(N): N為鏈表長度,刪除操作平均需循環(huán) N/2 次,最差 N 次。
  • 空間復(fù)雜度 O(1) : cur, pre 占用常數(shù)大小額外空間。
  1. package com.nateshao.sword_offer.topic_15_deleteNode; 
  2.  
  3. /** 
  4.  * @date Created by 邵桐杰 on 2021/11/21 16:22 
  5.  * @微信公眾號 程序員千羽 
  6.  * @個(gè)人網(wǎng)站 www.nateshao.cn 
  7.  * @博客 https://nateshao.gitee.io 
  8.  * @GitHub https://github.com/nateshao 
  9.  * @Gitee https://gitee.com/nateshao 
  10.  * Description: 刪除鏈表的節(jié)點(diǎn) 
  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.             // 若刪除節(jié)點(diǎn)是末尾節(jié)點(diǎn),往后移一個(gè) 
  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.      * 單指針實(shí)現(xiàn) 
  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.      * 遞歸實(shí)現(xiàn) 
  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

 

責(zé)任編輯:武曉燕 來源: 程序員千羽
相關(guān)推薦

2023-03-28 07:32:37

2021-05-19 10:37:16

WebFlux 前置工具

2022-02-14 10:16:22

Axios接口HTTP

2023-03-26 12:45:52

Linux內(nèi)核頭文件

2022-12-01 09:59:57

內(nèi)核觀測性方法

2021-05-20 07:15:34

RSA-PSS算法簽名

2021-03-18 00:04:13

C# 類型數(shù)據(jù)

2021-10-11 10:25:33

排列nums數(shù)組

2023-04-26 07:30:00

promptUI非結(jié)構(gòu)化

2017-01-22 15:09:08

架構(gòu)閉環(huán)演進(jìn)

2022-10-08 00:00:05

SQL機(jī)制結(jié)構(gòu)

2022-01-17 06:59:40

Grep指令linux

2021-12-29 08:27:05

ByteBuffer磁盤服務(wù)器

2021-08-27 07:06:10

IOJava抽象

2024-02-20 21:34:16

循環(huán)GolangGo

2022-03-08 17:52:58

TCP格式IP

2021-07-28 07:53:20

Github ActiDotnet 應(yīng)用

2023-08-04 08:20:56

DockerfileDocker工具

2021-01-12 05:08:49

DHCP協(xié)議模型

2021-08-27 07:06:09

DubboDocker技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號