一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - 編程技術 - 我們一起學習刪除鏈表的節(jié)點

我們一起學習刪除鏈表的節(jié)點

2022-01-10 23:05程序員千羽 編程技術

若 cur 指向某節(jié)點,則執(zhí)行 pre.next = cur.next ;若 cur 指向 nullnull ,代表鏈表中不包含值為 val 的節(jié)點。

我們一起學習刪除鏈表的節(jié)點

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

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

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

示例 2:

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

解題思路:

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

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

我們一起學習刪除鏈表的節(jié)點

** 算法流程:**

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

我們一起學習刪除鏈表的節(jié)點

復雜度分析:

  • 時間復雜度 O(N): N為鏈表長度,刪除操作平均需循環(huán) N/2 次,最差 N 次。
  • 空間復雜度 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. * @個人網(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é)點
  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é)點是末尾節(jié)點,往后移一個
  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. * 單指針實現(xiàn)
  53. *
  54. * @param head
  55. * @param val
  56. * @return
  57. */
  58. public ListNode deleteNode2(ListNode head, int val) {
  59. if (head == null) return 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. * 遞歸實現(xiàn)
  73. *
  74. * @param head
  75. * @param val
  76. * @return
  77. */
  78. public ListNode deleteNode3(ListNode head, int val) {
  79. if (head == null) return 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. }
  93. }

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

原文地址:https://mp.weixin.qq.com/s/jTI1x9JAk0WEPbDRFdt07w

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 边摸边吃奶边做爽视频免费 | 人人爽人人草 | 国产免费专区 | 日韩一二三 | 亚洲国产精品综合一区在线 | 91久久精品视频 | 波多野结衣久久国产精品 | 午夜伦理 第1页 | 天使萌痴汉在线中文字幕 | kayden·kross hd在线| 日本中文字幕不卡在线一区二区 | 国产卡一卡二卡3卡乱码免费 | 成人午夜在线视频 | 好大好爽好舒服视频 | 14一18cad中国大学生 | 美女的隐私视频免费看软件 | 国产成人激情视频 | 91免费播放人人爽人人快乐 | 秘书小说 | 婷射吧 | 国产小视频在线免费观看 | 国产高清免费午夜在线视频 | 无码国产成人777爽死 | t66y地址一地址二地址三 | 兽操人| 男人把大ji巴放进女人小说 | 成人尤物| 亚洲欧美精品天堂久久综合一区 | 日韩免费毛片视频杨思敏 | 沉香如屑西瓜视频免费观看完整版 | 日韩一区三区 | 精品久久久久亚洲 | 免费久久久久 | 奇米777四色精品综合影院 | 暖暖免费观看高清在线 | 操熟美女又肥又嫩的骚屁股 | 我的好妈妈7中字在线观看韩国 | 午夜在线观看免费完整直播网页 | 色香视频在线 | 国产乱码免费卡1卡二卡3卡四 | 日韩高清一区二区三区不卡 |