目錄
057 多路遞歸 e03 楊輝三角2
thinking:二維數組的動態初始化?
057 多路遞歸 e03 楊輝三角3
058 鏈表 e01 反轉單向鏈表1
058 鏈表 e01 反轉單向鏈表2
058 鏈表 e01 反轉單向鏈表3 遞歸
058 鏈表 e01 反轉單向鏈表4
為什么是returnn1呢?也就是新頭,而不是一整個鏈表?
058 鏈表 e01 反轉單向鏈表5
058 鏈表 e02 根據值刪除節點1
058 鏈表 e02 根據值刪除節點2
058 鏈表 e03 刪除倒數節點1 遞歸
058 鏈表 e03 刪除倒數節點2
058 鏈表 e04 有序鏈表去重1
058 鏈表 e04 有序鏈表去重2 遞歸
058 鏈表 e05 有序鏈表去重1 遞歸
058 鏈表 e05 有序鏈表去重2
058 鏈表 e06 合并有序鏈表1
搞清楚: p1 = p1.next & p1.next=p2.next
058 鏈表 e06 合并有序鏈表2
058 鏈表 e07 合并多個有序鏈表
058 鏈表 e08 查找鏈表中間節點
058 鏈表 e09 判斷回文鏈表1
058 鏈表 e09 判斷回文鏈表2
057 多路遞歸 e03 楊輝三角2
thinking:二維數組的動態初始化?
Java 中的一維數組以及二維數組(8千字零基礎超全詳解)_java一維數組和二維數組-CSDN博客
057 多路遞歸 e03 楊輝三角3
058 鏈表 e01 反轉單向鏈表1
不斷創建新的節點,相當于復制黏貼一份鏈表了
說明可以單獨訪問ListNode里的val或者單獨訪問ListNode里的next。?
a:設置新鏈表第一個節點的value值,不用設置指針。
b:舊鏈表的第一個節點
c:創建一個ListNode,值為舊鏈表第一個節點的value,指向:新鏈表的頭部;并且,更新新鏈表的頭部。這里左側的n1代表一個節點,是包含vaule值和指向的節點,右側的n1只有指向的含義。(右側的n1也可以理解成,現在新建的節點和n1指向的方向相同。)
d:舊鏈表中的元素變成下一個舊鏈表元素
直到舊鏈表所有的元素插入完畢。
? ? ? ?和這里很相似,創建了一個新節點后,再讓頭部指向新的節點。因此,剛剛案例中,所謂的更新,也可以理解成讓n1指向新的節點?,也就是讓舊的節點指向新的節點(1指向2),因為1先插入,2后插入。
058 鏈表 e01 反轉單向鏈表2
first.next 指向head,其中first.next是指指針。就是這個指針指向head
head更新為first=將first的值賦值給head
058 鏈表 e01 反轉單向鏈表3 遞歸
?p.next 為5 這個東西,5.next 是這個東西的指向。所以就是p.next.next
讓4指向null,而不是像原先一樣還指向5,這樣不會造成死循環
058 鏈表 e01 反轉單向鏈表4
將舊鏈表的第二個節點移動到新鏈表的頭部
o2.next 指針含義:o2指向o3
那現在讓o1.next =o2.next 就是說,讓o1像o2一樣指向o3,也就是說,o2斷開了?。
為什么是returnn1呢?也就是新頭,而不是一整個鏈表?
? ? ? ?因為它每一次傳進來的都是一個元素,那就只對這個元素進行加工,并且之前還設置了toString方法,就是為了拼接這些元素的。?
-----------------------------------------------第二天想法--------------------------------------------------------------
噢我好像知道為什么直接返回n1就可以了,我一開始以為,返回n1就只返回一個元素,原來,返回n1就返回n1以及n1后面元素組成的這一條鏈子。!!?
------------------------------------------------------------------------------------------------------------------------------
058 鏈表 e01 反轉單向鏈表5
和方法2類似,方法2是面向對象,方法5是面向過程
n1 = o1: n1做了o1該做的事情,或者說o1的責任賦予給n1了。于是乎
o1 = o2 : o1就要回到舊鏈表中,那它要回到哪里去呢?它要回到的位置就是o2幫他記錄的位置。?
058 鏈表 e02 根據值刪除節點1
p1要刪除節點的上一個指針
p2要刪除節點的指針
理解:
p1.next = p2.next??
是指p1的指針等于p2的指針,而指針的作用是用于指明方向,因此意思為:p1指向的位置是p2指向的位置
p2 = p2.next?
這里的右邊是指 p2的下一個節點,整句話的意思是:將p2的下一個所有東西賦予給p2
也意味著p2向后平移了一位(假設現在鏈表不動,是指針在動)
優化:要不是原來的方案:舊的p2指向的下一位;或者新的方案:刪除后,p1指向的下一位
058 鏈表 e02 根據值刪除節點2
返回 p的下一個節點的指針以及值?
針對p.next =removeElements(p.next,val)這一塊,左邊的含義是:自身的指針要更新一下,不然一直在原地不動。那,需要更新一下的話,那要更新成什么樣子的呢?也就是說,這個指針要被賦予的值是什么呢?這個值從哪里來呢?就從右邊來的。p.next :下一個節點開始刪,removeElements() :刪完之后的那個鏈表,作為我當前節點的鏈表。
就拿這個做例子,數組是:1,2,6,3,6
現在進行到:1,2,6,3到1,2,6這一步
p.next: 指針現在指著3 那刪除之后,應該移動到6 (從下一個節點開始刪)
removeElements() :1,2,6(刪完之后的那個鏈表,作為我當前節點的鏈表)
我們再看,它的方法返回的是 3->null 這樣的,所以挺有那感覺。
嗚嗚盡力了,只能先理解到這里了。
--------------------------------------第二天的思路-------------------------------------------------------
右側:更新完了。左側:那就在你更新完之后的下一個節點開始。
----------------------------------------------------------------------------------------------------------------
058 鏈表 e03 刪除倒數節點1 遞歸
返回 0 代表倒數第0個
返回1 代表倒數第1個
返回2 代表倒數第2個?
如果p==null的話,返回0。也就是說,代表null在倒數第0個位置?
左邊和右邊的數字分別代表:每個節點,每個節點的下一個節點的倒數位置
如果,傳過來的n等于nth(nth:每個節點的下一個節點的倒數位置)?
舉個例子:p=3,那nth就是它的下一個節點的倒數位置,也就是4的倒數位置,4的倒數位置是2。現在要刪掉4。因此讓p=3指向p=5。
對于第一個節點來說,沒有上一個節點了。但我們之前處理的辦法都是:處理這個節點的下一個節點。因此,節點1 知道節點2 的位置,但是沒有人知道節點1在哪里。因此加一個哨兵。
058 鏈表 e03 刪除倒數節點2
方法二:設置兩個指針,先讓p2走n+1步。之后再讓p1,p2一起走,p2走多少步,p1就走多少步,要保持p1和p2的距離保持n+1,直到p2走到null為止。這樣,p1的下一個位置就是我要刪除的元素。
這里的n=2,是指我要刪除的是倒數第二個位置的元素,也就是4這個元素。
?p1.next :p1的指針
p1.next.next:p5
=:讓p1的指針指向p5
058 鏈表 e04 有序鏈表去重1
為p2賦值?
p1.next = p2.next :p1的指針方向現在改為p2的指針方向。因此,也代表p1向后平移一位。
058 鏈表 e04 有序鏈表去重2 遞歸
方法二:若第一個節點和第二個節點的取值相同的時候,不要第一個節點,要第二個節點。
2和3作比較的時候,若不相同,返回我(2),并且next更新為下一個節點,也就是p=3?
右側:更新完了。左側:那就在你更新完之后的下一個節點開始。
好像前面那道題也是差不多這樣的意思。?哎喲,好像明白了。
058 鏈表 e05 有序鏈表去重1 遞歸
058 鏈表 e05 有序鏈表去重2
058 鏈表 e06 合并有序鏈表1
搞清楚: p1 = p1.next & p1.next=p2.next
?第一個是:p1指向? p1下一個指向???的值,也就是p2。也就是指針往后平移一位
第二個是:p1的指針等于p2的指針,也就是 p2指向的方向現在也變成了p1指向的方向,也就是說p1指向了p3
058 鏈表 e06 合并有序鏈表2
4.next在8和9之間選擇。也就是4.next是這個mergeTwoLists方法得出的結果
?
058 鏈表 e07 合并多個有序鏈表
先把多個鏈表拆分,最后再合成變成一個數組。?
前者:多路遞歸較多體現
后者:單路遞歸較多體現,并沒有拆分為兩個或以上問題,只是相同的問題,但是問題規模減小;了。?
058 鏈表 e08 查找鏈表中間節點
奇數情況。
偶數情況。
不管奇數偶數,都是慢指針走一步,快指針走兩步。直到快指針走到null或者走到null的前一位,就停止,這個時候,慢指針指的就是中間位置。?
p2 != null要寫在前面,因為如果這個條件不成立的話,就不會執行第二個條件了,它的執行是有順序的。
058 鏈表 e09 判斷回文鏈表1
噢我好像知道為什么直接返回p1就可以了,我一開始以為,返回p1就只返回一個元素,原來,返回p1就返回p1以及p1后面元素組成的這一條鏈子。!!?
058 鏈表 e09 判斷回文鏈表2
使分開的方法合并到一起?
?
方法二:
既找到中間點,同時也讓前半部分的元素進行反轉。
以上這張圖是之前的案例的解釋?
部分代碼詳解:
ListNode o2 =o1.next: 舊頭的第二個位置命名為o2
o1.next=n1: o1這個舊頭的指針指向n1這個新頭,也就是o1所在的元素移動到新隊伍當中去了,(看3搬移那里)。
n1 = o1: o1要把責任交給n1了
o1 =? o2:o1要回去舊隊伍了。