【代碼隨想錄算法訓練營-第四天】【鏈表】24,19, 面試題 02.07,142

24. 兩兩交換鏈表中的節點

第一遍-遞歸-小看了一下題解

  • 思路:
    • 讀了兩遍題目才理解…
    • 相鄰節點的交換,這個操作很容易實現,但需要一個tmpNode
    • 因為是鏈表的題目,沒開始思考之前先加了dummyNode,還真管用
    • dummyNode作為了最后返回用的,以及新增preNode作為tmpNode
    • 用遞歸寫是因為不想用循環了…感覺遞歸寫起來好玩一些
    • 小看了一下題解的地方:(其實再給自己多一些debug的次數應該也能試出來)
      • 遞歸結束條件:|| i.next.next == null這個沒有想出來
/*
* 這部分是自己在Idea上寫的,用了之前的題目實現的MyLinkedList
* 感覺這樣會比在力扣上面寫更能熟悉鏈表一些,而且debug更容易一些
* */
package LinkList;public class Linklist_test {public static void main(String[] args) {MyLinkedList myLinkedList = new MyLinkedList();
//        myLinkedList.addAtHead(4);myLinkedList.addAtHead(3);myLinkedList.addAtHead(2);myLinkedList.addAtHead(1);LinklistSolution solution = new LinklistSolution();ListNode head = solution.swapPairs(myLinkedList.dummy.next);for (; head != null; head = head.next) {System.out.println(head.val);}}
}class LinklistSolution {public ListNode reverseDouble(ListNode head, ListNode preNode, ListNode i, ListNode j) {// 交換節點preNode.next = i.next;i.next = j.next;j.next = i;if (i.next == null || i.next.next == null) return head.next;// 移動節點j = i.next.next;i = i.next;preNode = preNode.next.next;return reverseDouble(head, preNode, i, j);}public ListNode swapPairs(ListNode head) {if (head == null || head.next == null) return head;ListNode dummy = new ListNode(-1);dummy.next = head;ListNode preNode = dummy;ListNode i = head;ListNode j = head.next;return reverseDouble(dummy, preNode, i, j);}
}
  • 看了一下代碼隨想錄Java的遞歸題解,嗯,真🐂,我想不出來
    • 示例代碼很好的利用了鏈表是通過指向下一個節點的地址鏈接的,所以返回newNode可以實現;
// 示例代碼
class LinklistSolution {public ListNode swapPairs(ListNode head) {// base case 退出提交if(head == null || head.next == null) return head;// 獲取當前節點的下一個節點ListNode next = head.next;// 進行遞歸ListNode newNode = swapPairs(next.next);// 這里進行交換next.next = head;head.next = newNode;return next;}
}

19.刪除鏈表的倒數第N個節點

第一遍

  • 思路:
    • 這一題誤操作了,忘記先自己想了,直接看題解了…
    • 算是兩遍AC吧,第一次fast指針的循環沒控制好
class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode dummy = new ListNode(-1);dummy.next = head;if (head.next == null) {return head.next;}ListNode slow = dummy;ListNode fast = dummy;for (int i = 0; i <= n; i++) {fast = fast.next;}for (; fast != null; fast = fast.next) {slow = slow.next;// fast = fast.next; 第一次提交的時候多寫了一個這個,debug的時候才發現不對}slow.next = slow.next.next;return dummy.next;}
}

面試題 02.07. 鏈表相交

第一遍

  • 思路:
    • 讀了第一遍直接寫了,第一次開始寫循環又出錯了…而且出了兩個錯誤
      • 錯誤1:判斷條件寫成了A.next != null,導致所有的鏈表長度都-1,長度為1且相交的時候會有問題;
      • 錯誤2:沒有寫A = A.next的修改條件;
    • 第一遍寫完,使用的是A.val = B.val的判斷條件,不對,發現有val相等,但是答案并不是對應指針;
    • 麻了,又去看題,看了n遍都沒看懂;
    • 最后看了題解,結果發現是指針相等(怎么從題中讀出的指針相等的?)
public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {if (headA == null || headB == null) {return null;}ListNode A = headA;ListNode B = headB;int lenA = 0, lenB = 0;while (A != null) {lenA++;A = A.next;}while (B != null) {lenB++;B = B.next;}A = headA;B = headB;int n = lenA >= lenB ? lenA - lenB : lenB - lenA;int m = lenA >= lenB ? lenB : lenA;if (lenA > lenB) {while (n > 0) {A = A.next;n--;}} else {while (n > 0) {B = B.next;n--;}}while (m > 0) {if (A == B) {return A;}A = A.next;B = B.next;m--;}return null;}
}

142.環形鏈表II

第一遍-看題解后一遍過

  • 思路:
    • 20mins的思考,想到了slowNode每次+1,fastNode每次+2;
    • 但這樣單純的移動,會導致兩個點相遇的時候不在入口,答案錯誤;
    • 最后還是看了題解,感覺不太能想得出來;
public class Solution {public ListNode detectCycle(ListNode head) {if (head == null || head.next == null) {return null;}ListNode fastNode = head;ListNode slowNode = head;while (fastNode != null && fastNode.next != null) {slowNode = slowNode.next;fastNode = fastNode.next.next;if (fastNode == slowNode) {while (head != fastNode) {head = head.next;fastNode = fastNode.next;}return head;}}return null;}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211706.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211706.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211706.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

空氣質量數據和氣象數據

1、北京、上海、廣州的空氣質量數據和氣象數據 要素如下&#xff1a; 逐日數據 時間跨度&#xff1a;2014.1.1-2022.3.31&#xff0c;共3012條數據 數據質量&#xff1a;98% 城市&#xff1a;只有北京、上海、廣州 可以用作論文數據 數據來源&#xff1a;中國環境監測總站…

23. 合并 K 個升序鏈表 --力扣 --JAVA

題目 給你一個鏈表數組&#xff0c;每個鏈表都已經按升序排列。 請你將所有鏈表合并到一個升序鏈表中&#xff0c;返回合并后的鏈表。 解題思路 對每個鏈表的首節點進行比較&#xff0c;獲取當前的最小節點&#xff1b;將每個階段的最小節點進行鏈接&#xff1b; 代碼展示 c…

亞馬遜云科技re_Invent 2023產品體驗:亞馬遜云科技產品應用實踐 國賽選手帶你看Elasticache Serverless

拋磚引玉 講一下作者背景&#xff0c;曾經參加過國內世界技能大賽云計算的選拔&#xff0c;那么在競賽中包含兩類&#xff0c;一類是架構類競賽&#xff0c;另一類就是TroubleShooting競賽&#xff0c;對應的分別為AWS GameDay和AWS Jam&#xff0c;想必也有朋友玩過此類競賽&…

4.權限特權轉移代碼

核心文件用戶文件引導文件 核心文件 ;------------------------新增--------------------------------; 本文件涉及了權限, 將使用調用門描述符來處理 低權限到高權限的轉移;------------------------權限---------------------------- ;此文件延用上個CORE.asm. 并做出一些修…

[linux] 解壓縮xz

在Linux命令行中解壓縮.xz文件&#xff0c;你可以使用以下幾種方法&#xff1a; 使用unxz工具&#xff1a; unxz filename.xz 這個命令會將filename.xz解壓縮為一個同名的未壓縮文件。如果原文件有其他的擴展名&#xff08;如.tar.xz&#xff09;&#xff0c;那么這個擴展名會被…

關于洛谷P1007最快的方法

P1007 獨木橋 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn) 題目背景 戰爭已經進入到緊要時間。你是運輸小隊長&#xff0c;正在率領運輸部隊向前線運送物資。運輸任務像做題一樣的無聊。你希望找些刺激&#xff0c;于是命令你的士兵們到前方的一座獨木橋上欣賞風景&#xf…

智能儀表板DevExpress Dashboard v23.1 - 支持自定義樣式創建

使用DevExpress Analytics Dashboard&#xff0c;再選擇合適的UI元素&#xff08;圖表、數據透視表、數據卡、計量器、地圖和網格&#xff09;&#xff0c;刪除相應參數、值和序列的數據字段&#xff0c;就可以輕松地為執行主管和商業用戶創建有洞察力、信息豐富的、跨平臺和設…

STM32 配置TIM定時中斷常用庫函數

單片機學習&#xff01; 目錄 ?編輯 1. 函數TIM_DeInit 2. 函數TIM_TimeBaseInit 配置時基單元 3. 函數TIM_TimeBaseStructInit 4. 函數TIM_Cmd 運行控制 5. 函數TIM_ITConfig 中斷輸出控制 6. 時基單元的時鐘選擇函數 6.1 函數TIM_InternalClockConfig 6.2 函數 TIM…

Configuring environment||ROS2環境配置

Goal: This tutorial will show you how to prepare your ROS 2 environment. Tutorial level: Beginner Time: 5 minutes ROS 2 relies on the notion &#xff08;concept&#xff09;of combining workspaces using the shell environment. “Workspace” is a ROS term …

C++進階篇8---智能指針

一、引言 為什么需要智能指針&#xff1f; 在上一篇異常中&#xff0c;關于內存釋放&#xff0c;我們提到過一個問題---當我們申請資源之后&#xff0c;由于異常的執行&#xff0c;代碼可能直接跳過資源的釋放語句到達catch&#xff0c;從而造成內存的泄露&#xff0c;對于這種…

C# Winform 日志系統

目錄 一、效果 1.刷新日志效果 2.單獨日志的分類 3.保存日志的樣式 二、概述 三、日志系統API 1.字段 Debug.IsScrolling Debug.Version Debug.LogMaxLen Debug.LogTitle Debug.IsConsoleShowLog 2.方法 Debug.Log(string) Debug.Log(string, params object[]) …

數據結構之內部排序

目錄 7-1 直接插入排序 輸入格式: 輸出格式: 輸入樣例: 輸出樣例: 7-2 尋找大富翁 輸入格式: 輸出格式: 輸入樣例: 輸出樣例: 7-3 PAT排名匯總 輸入格式: 輸出格式: 輸入樣例: 輸出樣例: 7-4 點贊狂魔 輸入格式&#xff1a; 輸出格式&#xff1a; 輸入樣例&a…

RabbitMQ在國內為什么沒有那么流行?

MQ&#xff08;消息隊列&#xff09;的世界。MQ&#xff0c;就像是一個巨大的郵局&#xff0c;負責在不同服務或應用間傳遞消息。它可以幫助我們解耦系統&#xff0c;提高性能&#xff0c;還能做到異步處理和流量削峰。 基本使用 RabbitMQ是一個開源的消息代理和隊列服務器&a…

spring boot + uniapp 微信公眾號 jsapi 支付

后端支付類 package com.ruoyi.coupon.payment;import com.google.gson.Gson; import com.ruoyi.coupon.payment.dto.PayParamJsapiDto; import com.ruoyi.coupon.payment.dto.RefundParam; import com.ruoyi.coupon.service.ICouponConfigService; import com.wechat.pay.jav…

FFmpeg抽取視頻h264數據重定向

根據視頻重定向技術解析中的 截獲解碼視頻流的思路&#xff0c;首先需要解決如何輸出視頻碼流的問題。 目前只針對h264碼流進行獲取&#xff0c;步驟如下&#xff1a; 打開mp4文件并創建一個空文件用于存儲H264數據 提取一路視頻流資源 循環讀取流中所有的包(AVPacket),為…

redis中使用pipeline批量處理請求提升系統性能

在操作數據庫時&#xff0c;為了加快程序的執行速度&#xff0c;在新增或更新數據時&#xff0c;可以通過批量提交的方式來減少應用和數據庫間的傳輸次數&#xff1b;在redis中也有這樣的技術實現批量處理&#xff0c;也就是管道——Pipeline。它也是通過批量提交數據的方式來實…

線程安全3--wait和notify

文章目錄 wait and notify&#xff08;等待通知機制notify補充 wait and notify&#xff08;等待通知機制 引入wait notify就是為了能夠從應用層面上&#xff0c;干預到多個不同線程代碼的執行順序&#xff0c;這里說的干預&#xff0c;不是影響系統的線程調度策略&#xff08…

uni-app應用設置 可以根據手機屏幕旋轉進行 (橫/豎) 屏切換

首先 我們打開項目的 manifest.json 在左側導航欄中找到 源碼視圖 然后找到 app-plus 配置 在下面加上 "orientation": [//豎屏正方向"portrait-primary",//豎屏反方向"portrait-secondary",//橫屏正方向"landscape-primary",//橫屏…

第57天:django學習(六)

模版之過濾器 語法&#xff1a; {{obj|filter__name:param}} 變量名字|過濾器名稱&#xff1a;變量 default 如果一個變量是false或者為空&#xff0c;使用給定的默認值。否則&#xff0c;使用變量的值。例如&#xff1a; {{ value|default:"nothing"}} length …

IDEA啟動應用時報錯:錯誤: 找不到或無法加載主類 @C:\Users\xxx\AppData\Local\Temp\idea_arg_filexxx

IDEA啟動應用時報錯&#xff0c;詳細錯誤消息如下&#xff1a; C:\devel\jdk1.8.0_201\bin\java.exe -agentlib:jdwptransportdt_socket,address127.0.0.1:65267,suspendy,servern -XX:TieredStopAtLevel1 -noverify -Dspring.output.ansi.enabledalways -Dcom.sun.management…