算法學習筆記——單雙鏈表及其反轉—堆棧詮釋

單雙鏈表及其反轉——堆棧詮釋

按值傳遞

  • intlongbyteshortcharfloatdouble、booleanString 都是按值傳遞

  • 概念:在方法被調用時,實參通過形參把它的內容副本傳入方法內部,此時形參接收到的內容是實參值的一個拷貝,因此在方法內對形參的任何操作,都僅僅是對這個副本的操作,不影響原始值的內容

  • 分析:向函數傳參時,只是在棧中生成變量a的一個副本a1,在函數內被修改的a其實是a1,所以函數內修改參數的值并不會影響實參的值,這就是值傳遞

    int a = 10;
    f(a);
    system.out.println(a);public static void f(int a) {a = 0;
    }// 結果還是打印10
    

按引用傳遞

  • 其他類型和數值都是按引用傳遞

  • 概念:”引用”也就是指向真實內容的地址值,在方法調用時,實參的地址通過方法調用被傳遞給相應的形參,在方法體內,形參和實參指向通愉快內存地址,對形參的操作會影響的真實內容

  • 分析:

    • 創建Number對象存儲在堆中,并將其引用地址賦值給變量b
    • 調用g1()g2()方法時,棧空間中會拷貝對象引用地址為b1和b2并作為參數傳遞,因此bb1b2都指向堆中同一個Number對象
    • g1()方法中,將參數b1修改為null,這只是改變了b1的指向,不影響主函數中變量b的指向,主函數的b仍然指向原來的Number對象。
    • g2()方法中,通過參數b2修改b2.val的值為6,這相當于通過b2的引用地址找到并修改了堆中Number對象的val值,因此主函數中變量b所指向的Number對象的val值也會被修改
    • 總結:指向的是同一個內存區域,但是不同的兩個引用
    public static void main(String[] args){Number b = new Number(5);g1(b);System.out.println(b.val);g2(b);System.out.println(b.val);
    }
    // 結果:
    // 5
    // 6public static class Number{public int val;public Number(int v){val = v;}
    }public static void g1(Number b){b = null;
    }public static void g3(Number b){b.val = 6;
    }public static void g3(int[] c){c = null;
    }
    

單鏈表的定義

  • 什么是單鏈表,單鏈表是一種通過指針串聯在一起的線性結構,每一個節點由兩部分組成,一個是數據域一個是指針域(存放指向下一個節點的指針),最后一個節點的指針域指向null
  • 單鏈表不要求邏輯上相鄰的兩個元素在物理位置上也相鄰,因此不需要連續的存儲空間
  • 單鏈表的入口節點稱為鏈表的頭結點也就是head
public class ListNode {// 結點的值public int val;// 下一個節點public ListNode next;// 節點的構造函數(有兩個參數)public ListNode(int val, ListNode next) {this.val = val;this.next = next;}
}

在這里插入圖片描述

雙鏈表的定義

  • 什么是雙鏈表,雙鏈表是一種通過指針串聯在一起的線性結構,每一個節點由三部分組成,每個節點包含數據域、指向下一個節點的指針(next)和指向前一個節點的指針(prev)
  • 雙鏈表 既可以向前查詢也可以向后查詢
  • 雙鏈表的入口節點稱為鏈表的頭結點也就是head
public class DoubleListNode {// 結點的值public int val;// 下一個節點public DoubleListNode next;// 上一個節點public DoubleListNode prev;// 節點的構造函數(有兩個參數)public ListNode(int val, DoubleListNode next) {this.val = val;this.prev = prev;this.next = next;}
}

在這里插入圖片描述

反轉單鏈表

public static ListNode reverseList(ListNode head){ListNode pre = null;ListNode next = null;while (head != null){next = head.next;head.next = pre;pre = head;head = next;}return pre;
}

在這里插入圖片描述

反轉雙鏈表

public static ListNode reverseDoubleList(DoubleListNode head){DoubleListNode pre = null;DoubleListNode next = null;while (head != null){next = head.next;head.next = pre;head.last = next;pre = head;head = next;}return pre;
}

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

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

相關文章

Makefile中eval函數的用法

Makefile中eval函數的用法 一,eval函數的使用方法:二,eval函數的優勢 一,eval函數的使用方法: 在Makefile中,eval 函數的作用是用來動態地執行Makefile中的命令或賦值操作。它的基本語法如下: …

Spring MVC數據綁定和響應——簡單數據綁定(三)POJO綁定

一、POJO數據綁定的使用場景 在使用簡單數據類型綁定時,可以很容易的根據具體需求來定義方法中的形參類型和個數,然而在實際應用中,客戶端請求可能會傳遞多個不同類型的參數數據,如果還使用簡單數據類型進行綁定,那么就…

adb shell執行定時2小時命令

在Android設備上使用adb shell來執行一個定時2小時后運行的命令并不直接支持,因為adb shell是即時執行shell命令的工具,不支持內置的定時任務功能。但是,你可以通過幾種方法來實現類似的功能: 方法一:使用sleep命令 …

dbeaver數據庫鏈接工具

1、下載dbeaver 一個綠色版一個安裝版,官網開源版 2、安裝 3、可以導入之前navicat的鏈接 導入 選擇navicat 反編譯密碼的:https://tool.lu/coderunner navicat 版本15的密碼解密:https://www.iatodo.com/navicatpw

css動畫自定義動畫間隔時間

function playAnimation(element) {var animationName rubberBand;var duration 2000; // 動畫持續時間,單位為毫秒element.style.animation ${animationName} 1s ease;element.addEventListener(animationend, function() {// 動畫結束后重置樣式,以…

服務運營 | MS文章精選:線上點單,當真免排隊?餐飲零售與醫療場景中的全渠道運營

編者按: 小A走進了一家奶茶店,準備向店員點單,但卻在屏幕上看到還有98杯奶茶待制作(因為線上訂單突然暴增)。因此,小A不滿地嘟囔著離開了奶茶店。這個例子展示了線上渠道可能會對線下渠道造成一些負面影響…

使用AES,前端加密,后端解密,spring工具類了

學習python的時候,看到很多會對參數進行加密,于是好奇心驅使下,讓我去了解了下AES加密如何在java中實現。 首先 npm install crypto-js 然后在你的方法中,給你們前端源碼看看,因為我用的ruoyi框架做的實驗&#xff…

四川音盛佳云電子商務有限公司抖音電商的先行者

在當今數字時代,電商行業風起云涌,各大平臺競相爭奪市場份額。而在這其中,四川音盛佳云電子商務有限公司以其獨特的抖音電商服務模式,悄然崛起,成為了行業中的一股不可忽視的力量。今天,就讓我們一起走進音…

【GD32F303紅楓派使用手冊】第二十六節 EXMC-液晶驅動實驗

26.1 實驗內容 通過本實驗主要學習以下內容: LCD顯示原理 EXMC NOR/SRAM模式時序和8080并口時序 LCD顯示控制 26.2 實驗原理 使用MCU的EXMC外設實現8080并口時序,和TFT-LCD控制器進行通信,控制LCD顯示圖片、字符、色塊等。 26.2.1 TFT…

圖像超分辨率重建

一、什么是圖像超分辨 圖像超分辨是一種技術,旨在通過硬件或軟件的方法提高原有圖像的分辨率。這一過程涉及從一系列低分辨率的圖像中獲取一幅高分辨率的圖像,實現了時間分辨率向空間分辨率的轉換。超分辨率重建的核心思想是利用多幀圖像序列的時間帶寬來…

計算機畢業設計Thinkphp/Laravel學生考勤管理系統zyoqy

管理員登錄學生考勤管理系統后,可以對首頁、個人中心、公告信息管理、年級管理、專業管理、班級管理、學生管理、教師管理、課程信息管理、學生選課管理、課程簽到管理、請假申請管理、銷假申請管理等功能進行相應操作,如圖5-2所示。學生登錄進入學生考勤…

金蝶云蒼穹考試題目大全

前言 受不了某些地方看個答案還要收費,總結多份試卷 題目有重復,關鍵字檢索即可 試卷一 金蝶云蒼穹考試題目大全 單選題 開發知識錯題反饋1.0分 1.關于編碼規則的適用范圍說法錯誤的是 A.單據沒有設置主業務組織的情況下,則校驗用戶當前登…

【Spine學習16】之 人物面部綁定

1、創建頭部骨骼 一根頭骨 以頭骨為父結點創建一個面部控制器face-holder 2、創建頭發和face面部控制結點的變換約束 左右頭發的約束指向為face結點 3、設定后發的變換約束,約束指向為face結點,反方向移動 設置參數為-100 同理,耳朵也依…

C# 中的 App.manifest 文件:優化應用程序配置與權限管理

前言 在開發 C# 應用程序時,可能會忽略一個重要的文件——App.manifest。這個文件看似不起眼,卻在應用程序的運行和用戶體驗上扮演著關鍵角色。了解和正確配置 App.manifest 文件,不僅可以確保應用程序在不同操作系統上的兼容性,…

解決uniapp,textarea拉起頁面被頂起和鍵盤被輸入框遮擋的問題。

1:Android、ios 同時解決; 2:我們在開發的時候會發現textarea或者input拉起鍵盤的時候整個頁面被頂起了,header也被頂沒了;官方給了:adjustPositionfalse屬性,設置完之后頁面就不會被頂起,但是…

談談SQL優化

SQL優化是數據庫性能優化中的關鍵環節,旨在提高查詢執行的效率和響應速度。下面是一些常見的SQL優化技巧和策略,涵蓋索引、查詢設計、表結構設計等方面: 1. 索引優化 創建索引:為常用查詢的過濾條件(WHERE 子句&…

了解json

一.什么是json 1.什么是json是一種輕量級的數據交互,可以按照指定的json格式去組織和封裝數據 2.json本質上是一個帶有特定格式的字符串 二.json主要功能:json就是一種在各個編程語言中流通的數據格式,負責不同語言中的數據傳遞和交互&…

【Python時序預測系列】基于CNN+Bi-LSTM實現單變量時間序列預測(案例+源碼)

這是我的第309篇原創文章。 一、引言 基于CNN(卷積神經網絡)和Bi-LSTM(雙向長短期記憶網絡)的單變量時間序列預測是一種結合空間特征提取和時間依賴建模的方法。以下是一個基于Python和TensorFlow/Keras實現的示例,展…

C++ 高頻面試題

C 初級面試題及其詳細解答 1. 解釋 C 中的基本數據類型。 解答: C 提供了幾種基本數據類型,包括: int:整型,用于存儲整數。float 和 double:浮點型,用于存儲小數。char:字符型&am…

Android 強制使用移動網絡訪問接口

Android 強制使用移動網絡訪問接口_安卓連接wifi強制使用移動數據-CSDN博客 Android應用層實現恢復出廠設置功能_android7 intent 打開恢復出廠設置-CSDN博客