亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

單鏈表基礎(chǔ)操作詳解:從節(jié)點(diǎn)定義到逆序與合并

單鏈表基礎(chǔ)操作詳解:從節(jié)點(diǎn)定義到逆序與合并 標(biāo)題寫的“單列表”我猜大概率是“單鏈表”的筆誤。單鏈表singly linked list是數(shù)據(jù)結(jié)構(gòu)里最基礎(chǔ)也最容易被輕視的一節(jié)課。它不只是考試題后面的棧、隊(duì)列、哈希表的鏈地址法、圖的鄰接表、LRU緩存底層全是鏈表或者鏈表思想的變體。這篇文章就把單鏈表的創(chuàng)建和使用講透從節(jié)點(diǎn)的定義、頭插法和尾插法到查找、插入、刪除這些基本操作再把兩個(gè)高頻經(jīng)典問題——鏈表逆序和兩個(gè)升序鏈表合并——完整寫一遍。如果你正在做“單鏈表的基本操作實(shí)驗(yàn)”或者準(zhǔn)備面試刷鏈表題這篇可以直接照著敲代碼也能幫你避掉那些經(jīng)常讓人調(diào)一晚上的低級錯(cuò)誤。1. 為什么數(shù)組用得好好的還要搞出一個(gè)鏈表來1.1 數(shù)組的三處硬傷數(shù)組是大多數(shù)人學(xué)會的第一種數(shù)據(jù)結(jié)構(gòu)它確實(shí)好用連續(xù)內(nèi)存、按下標(biāo)直接訪問a[i]一步到位時(shí)間復(fù)雜度 O(1)。但數(shù)組的缺點(diǎn)在我實(shí)際寫程序時(shí)越來越明顯尤其在元素個(gè)數(shù)不確定、頻繁增刪的場景里。第一處硬傷是長度固定。C 語言的數(shù)組聲明之后長度就不能變必須提前估算最大值。估算大了浪費(fèi)內(nèi)存估算小了程序直接越界。Python 里的 list 雖然看著能隨便 append但底層是動態(tài)數(shù)組擴(kuò)容時(shí)要申請一塊更大的內(nèi)存然后把舊數(shù)據(jù)全部搬過去這個(gè)搬遷成本是 O(n) 的。如果你往一個(gè)動態(tài)數(shù)組里不斷頭插每次都要把已有元素一個(gè)個(gè)往后挪性能肉眼可見地拉胯。第二處硬傷是插入和刪除的代價(jià)太高。在數(shù)組中間插入一個(gè)元素需要把插入位置后面的所有元素依次后移一位刪除則是前移。假設(shè)數(shù)組長度是 n在頭部插入就是 O(n)在中間隨機(jī)位置插入平均也是 O(n)。這在寫課程設(shè)計(jì)、做數(shù)據(jù)處理時(shí)很致命。第三處硬傷是內(nèi)存的連續(xù)性要求。數(shù)組必須占用一整塊連續(xù)的內(nèi)存空間。內(nèi)存被分來分去之后剩余的空閑塊可能都是零散的任何一個(gè)單獨(dú)的空閑塊都裝不下一個(gè)大數(shù)組。這時(shí)候系統(tǒng)要么觸發(fā)內(nèi)存整理要么分配失敗。1.2 鏈表的本質(zhì)用離散存儲換靈活操作鏈表的思路很簡單既然連續(xù)的大塊內(nèi)存不好找那我就不找連續(xù)的了。每個(gè)元素放在一個(gè)獨(dú)立的“節(jié)點(diǎn)”里節(jié)點(diǎn)之間用指針串起來像一串珠子一樣。每個(gè)節(jié)點(diǎn)只干兩件事存自己的數(shù)據(jù)記下一個(gè)節(jié)點(diǎn)在哪兒。所以單鏈表的核心定義就是節(jié)點(diǎn)之間是線性邏輯關(guān)系但物理存儲是離散的。這個(gè)設(shè)計(jì)帶來幾個(gè)直接好處內(nèi)存分配靈活每個(gè)節(jié)點(diǎn)可以單獨(dú)分配不需要一次性申請一整塊。插入刪除只需要改指針不需要搬動其他元素O(1) 完成。長度天然動態(tài)想加就加想刪就刪。代價(jià)也很明確不支持隨機(jī)訪問想找第 k 個(gè)節(jié)點(diǎn)必須從頭一個(gè)個(gè)往后走時(shí)間復(fù)雜度 O(n)每個(gè)節(jié)點(diǎn)多出一個(gè)指針域內(nèi)存占用比數(shù)組高另外由于節(jié)點(diǎn)在內(nèi)存里不連續(xù)CPU 緩存命中率低大數(shù)據(jù)量下遍歷性能不如數(shù)組。對比項(xiàng)數(shù)組單鏈表隨機(jī)訪問O(1)O(n)頭部插入O(n)O(1)頭部刪除O(n)O(1)內(nèi)存連續(xù)性要求連續(xù)不要求額外內(nèi)存開銷基本沒有每個(gè)節(jié)點(diǎn)一個(gè)指針域我見過不少同學(xué)一上來就糾結(jié)“哪個(gè)更好”。沒有更好只有合適。頻繁查找、數(shù)量穩(wěn)定用數(shù)組頻繁增刪、數(shù)量動態(tài)用鏈表。這也是為什么實(shí)際項(xiàng)目里兩種都會用。1.3 指針也好引用也罷理解“節(jié)點(diǎn)”才是關(guān)鍵學(xué)鏈表的時(shí)候很多人被“指針”這個(gè)概念嚇住了。C 語言里指針就是一個(gè)變量存的是另一個(gè)變量的內(nèi)存地址。Python 里沒有指針這個(gè)說法但有個(gè)東西叫“引用”本質(zhì)是一樣的對象在內(nèi)存中有地址變量綁定到這個(gè)地址上。理解這一點(diǎn)特別重要。你在 Python 里寫a ListNode(1) b a b.val 2改的是同一個(gè)對象因?yàn)閍和b指向同一個(gè)內(nèi)存位置。鏈表的next字段存的就是下一個(gè)節(jié)點(diǎn)的引用或者指針。操作鏈表本質(zhì)上就是不斷問自己一個(gè)問題當(dāng)前這個(gè)節(jié)點(diǎn)的 next 應(yīng)該指向誰在紙上畫圖是理解鏈表的最好方式。一個(gè)節(jié)點(diǎn)畫成一個(gè)方塊左邊寫值右邊畫一個(gè)箭頭指向下一個(gè)方塊。所有指針操作跟著箭頭走一遍就通了。2. 從節(jié)點(diǎn)定義開始創(chuàng)建鏈表的兩種方法2.1 節(jié)點(diǎn)結(jié)構(gòu)怎么定義最順手無論用什么語言單鏈表的節(jié)點(diǎn)都長一個(gè)樣一個(gè)數(shù)據(jù)域一個(gè)指針域/引用域。Python 版本用類定義class ListNode: def __init__(self, val0, nextNone): self.val val self.next nextC 語言版本用結(jié)構(gòu)體typedef struct Node { int data; struct Node *next; } Node;兩個(gè)版本一一對應(yīng)。val存數(shù)據(jù)next存下一個(gè)節(jié)點(diǎn)的位置。最后一個(gè)節(jié)點(diǎn)的next指向NonePython或者NULLC表示鏈表結(jié)束。這里有個(gè)細(xì)節(jié)節(jié)點(diǎn)定義里的nextNone是默認(rèn)參數(shù)。這樣創(chuàng)建單個(gè)節(jié)點(diǎn)時(shí)可以不傳 next寫node ListNode(5)它天然就是鏈表尾部。這個(gè)默認(rèn)值看起來不起眼實(shí)際寫代碼時(shí)能少寫很多判斷。2.2 尾插法順序不變最符合直覺的建鏈方式創(chuàng)建鏈表最直接的想法是新來的節(jié)點(diǎn)放到鏈表的最后面。這樣創(chuàng)建出來的鏈表順序和輸入順序完全一致。比如輸入[1, 2, 3]得到的鏈表就是1 - 2 - 3 - None。尾插法的實(shí)現(xiàn)需要維護(hù)一個(gè)尾指針每次都在尾指針后面掛新節(jié)點(diǎn)然后讓尾指針移動到新節(jié)點(diǎn)上def create_by_tail(values): dummy ListNode() # 哨兵節(jié)點(diǎn)下面細(xì)說 tail dummy # 尾指針 for v in values: tail.next ListNode(v) # 新節(jié)點(diǎn)掛到尾部 tail tail.next # 尾指針后移 return dummy.next # 哨兵的下一個(gè)才是真正的頭節(jié)點(diǎn)你注意這里的dummy節(jié)點(diǎn)。它本身不存有效數(shù)據(jù)作用是讓代碼在鏈表為空時(shí)也能統(tǒng)一處理。沒有 dummy 的話往空鏈表里加第一個(gè)節(jié)點(diǎn)時(shí)要額外判斷if head is None代碼會丑很多。后面合并兩個(gè)鏈表時(shí)這種哨兵節(jié)點(diǎn)更是神器。2.3 頭插法代碼最簡潔但鏈表是反的頭插法的思路反過來每次把新節(jié)點(diǎn)插到鏈表的頭部讓新節(jié)點(diǎn)成為新的頭節(jié)點(diǎn)。def create_by_head(values): head None for v in values: new_node ListNode(v) new_node.next head head new_node return head代碼非常短但有一個(gè)容易忽略的副作用輸入順序和鏈表順序相反。輸入[1, 2, 3]得到的是3 - 2 - 1 - None。為什么會反因?yàn)槊看涡鹿?jié)點(diǎn)都跑到最前面了后輸入的反而在鏈頭。這個(gè)特性不是 bug它可以被反過來利用如果你有一批逆序數(shù)據(jù)想得到正序鏈表或者實(shí)現(xiàn)“后進(jìn)先出”的棧結(jié)構(gòu)頭插法正好合適。很多教科書在講“棧的鏈表實(shí)現(xiàn)”時(shí)用的就是頭插法思路。2.4 哨兵節(jié)點(diǎn)到底要不要實(shí)戰(zhàn)中的選擇上一節(jié)代碼里出現(xiàn)了dummy很多初學(xué)者會困惑這不是白造了一個(gè)節(jié)點(diǎn)嗎哨兵節(jié)點(diǎn)的價(jià)值在于消除邊界條件的特殊處理。舉個(gè)例子刪除一個(gè)節(jié)點(diǎn)正常的邏輯是找到前驅(qū)節(jié)點(diǎn) prev然后prev.next prev.next.next。但如果要?jiǎng)h的是頭節(jié)點(diǎn)它沒有前驅(qū)就要單獨(dú)寫一個(gè)分支。有了哨兵節(jié)點(diǎn)之后頭節(jié)點(diǎn)也變成了“某個(gè)節(jié)點(diǎn)的下一個(gè)”所有刪除操作統(tǒng)一成同一種寫法。建鏈方式是否需要哨兵結(jié)果順序適用場景尾插法推薦和輸入一致一般業(yè)務(wù)數(shù)據(jù)、完整創(chuàng)建頭插法不需要和輸入相反棧結(jié)構(gòu)、逆序構(gòu)建我的個(gè)人建議是刷題和寫項(xiàng)目時(shí)都用哨兵節(jié)點(diǎn)養(yǎng)成習(xí)慣。它讓你少想很多 if 分支代碼也更不容易出 bug。唯一的代價(jià)就是多一個(gè)節(jié)點(diǎn)的內(nèi)存現(xiàn)代計(jì)算機(jī)完全不在乎這一點(diǎn)。3. 基本操作實(shí)驗(yàn)遍歷、查找、插入、刪除3.1 遍歷和求長度所有操作的地基遍歷是最基礎(chǔ)的操作思路就是“從頭開始跟著 next 一直走走到 None 為止”def traverse(head): cur head while cur is not None: print(cur.val) cur cur.next求鏈表長度的代碼幾乎一樣只是把打印換成計(jì)數(shù)def length(head): count 0 cur head while cur is not None: count 1 cur cur.next return count這里有一個(gè)新手很容易犯的錯(cuò)有人在 while 里寫了cur.next然后循環(huán)里又移動cur。仔細(xì)看如果你寫的是while cur.next is not None那循環(huán)結(jié)束時(shí)停在了最后一個(gè)節(jié)點(diǎn)上最后一個(gè)節(jié)點(diǎn)的值就沒處理到。統(tǒng)一用while cur is not None判斷邏輯最簡單。3.2 按值查找和按下標(biāo)訪問按值查找就是遍歷一遍比較每個(gè)節(jié)點(diǎn)的 valdef find_by_value(head, target): cur head pos 0 while cur is not None: if cur.val target: return pos cur cur.next pos 1 return -1 # 沒找到按下標(biāo)訪問也一樣只是判斷條件從“值相等”變成“走夠了步數(shù)”def get_by_index(head, index): cur head for _ in range(index): if cur is None: raise IndexError(下標(biāo)越界) cur cur.next if cur is None: raise IndexError(下標(biāo)越界) return cur.val注意越界判斷。鏈表不支持隨機(jī)訪問按下標(biāo)訪問是 O(n)這是鏈表的固有特性。如果頻繁按位置訪問說明你選錯(cuò)了數(shù)據(jù)結(jié)構(gòu)。3.3 插入操作先連后繼再連前驅(qū)在鏈表第 pos 個(gè)位置后面插入一個(gè)新節(jié)點(diǎn)核心操作兩步def insert_after(prev_node, new_node): 在 prev_node 后面插入 new_node new_node.next prev_node.next prev_node.next new_node這兩行的順序不能反。我當(dāng)年第一次寫的時(shí)候就是反著來的# 錯(cuò)誤示范 prev_node.next new_node # 先把 prev 指向新節(jié)點(diǎn) new_node.next prev_node.next # 但 prev_node.next 已經(jīng)變成 new_node 自己了反了之后新節(jié)點(diǎn) next 指向了自己形成自環(huán)鏈表從那里斷成兩截后面所有節(jié)點(diǎn)徹底丟失。正確的邏輯永遠(yuǎn)是先把新節(jié)點(diǎn)的后繼接到原后繼上再把前驅(qū)的 next 接到新節(jié)點(diǎn)上。注意這個(gè)順序插到頭節(jié)點(diǎn)、插到中間、插到末尾都一樣。類比一下你想在一列隊(duì)伍里插隊(duì)一定是你先拉住后面那個(gè)人的手再讓前面那個(gè)人拉住你。如果前面那個(gè)人先松手拉住你后面那個(gè)人就找不到了。3.4 刪除節(jié)點(diǎn)找到前驅(qū)是關(guān)鍵刪除的本質(zhì)是讓目標(biāo)節(jié)點(diǎn)的前驅(qū)直接跳過目標(biāo)節(jié)點(diǎn)指向目標(biāo)節(jié)點(diǎn)的后繼。def delete_node(head, target_val): dummy ListNode(0) dummy.next head prev dummy cur head while cur is not None: if cur.val target_val: prev.next cur.next return dummy.next prev cur cur cur.next return dummy.next幾個(gè)要點(diǎn)借助 dummy 以后刪除頭節(jié)點(diǎn)也只是普通情況不需要單獨(dú)寫 if。刪除操作真正的難度不是“刪”這一步而是“找到前驅(qū)”。單鏈表只能往后走你不能從當(dāng)前節(jié)點(diǎn)回頭找它的前驅(qū)所以必須用一個(gè) prev 指針跟在后面。C 語言里刪除節(jié)點(diǎn)還要手動free(cur)否則會內(nèi)存泄漏Python 有垃圾回收不需要這一步但你要明白在這個(gè)語言里節(jié)點(diǎn)是何時(shí)被回收的。3.5 一個(gè)完整可運(yùn)行的鏈表類“基本操作實(shí)驗(yàn)”直接抄把上面的操作組裝成一個(gè)類就是課程里常見的“單鏈表基本操作實(shí)驗(yàn)”class SinglyLinkedList: def __init__(self): self.head None self.size 0 def insert_head(self, val): 頭插法插入 node ListNode(val) node.next self.head self.head node self.size 1 def append(self, val): 尾插法插入 node ListNode(val) if self.head is None: self.head node else: cur self.head while cur.next is not None: cur cur.next cur.next node self.size 1 def insert(self, index, val): 在下標(biāo) index 處插入 if index 0 or index self.size: raise IndexError(下標(biāo)越界) if index 0: self.insert_head(val) return prev self.head for _ in range(index - 1): prev prev.next node ListNode(val) node.next prev.next prev.next node self.size 1 def delete(self, index): 刪除下標(biāo) index 處的節(jié)點(diǎn) if index 0 or index self.size: raise IndexError(下標(biāo)越界) if index 0: self.head self.head.next else: prev self.head for _ in range(index - 1): prev prev.next prev.next prev.next.next self.size - 1 def find(self, val): 按值查找返回下標(biāo) cur self.head pos 0 while cur is not None: if cur.val val: return pos cur cur.next pos 1 return -1 def display(self): cur self.head values [] while cur is not None: values.append(str(cur.val)) cur cur.next print( - .join(values) - None)這個(gè)類能覆蓋絕大多數(shù)課程實(shí)驗(yàn)和面試基礎(chǔ)題的測試需求。注意size字段的維護(hù)插入時(shí)加一刪除時(shí)減一。很多人漏掉這一步后面查找和插入的下標(biāo)判斷就會出 bug。調(diào)試鏈表的題建議先把“遍歷打印”寫出來每操作一步就打印一次鏈表比盯代碼快得多。4. 單鏈表逆序最容易丟指針的經(jīng)典題4.1 迭代反轉(zhuǎn)三個(gè)指針的接力“python 單鏈表逆序”是熱搜經(jīng)常出現(xiàn)的題面試?yán)镆矌缀醣乜?。它的要求是不新建鏈表只改指針方向把鏈表整個(gè)反過來。迭代法的核心思路是三個(gè)指針prev記錄當(dāng)前節(jié)點(diǎn)的前驅(qū)cur記錄當(dāng)前節(jié)點(diǎn)nxt記錄當(dāng)前節(jié)點(diǎn)的后繼。每到一個(gè)節(jié)點(diǎn)先把后繼存下來再把當(dāng)前節(jié)點(diǎn)的 next 指向 prev然后三個(gè)指針整體前移def reverse_list(head): prev None cur head while cur is not None: nxt cur.next # 先保存后繼 cur.next prev # 指針反轉(zhuǎn) prev cur # prev 前移 cur nxt # cur 前移 return prev # 新的頭節(jié)點(diǎn)很多初學(xué)者在循環(huán)里不知道第三步該干什么硬生生把cur cur.next寫進(jìn)去。問題在于cur.next已經(jīng)在第二步被改成了prev你再cur cur.next就回到了原來的前驅(qū)永遠(yuǎn)在原地打轉(zhuǎn)。所以必須提前用nxt保存好原來的后繼。代碼返回的是prev而不是cur因?yàn)檠h(huán)結(jié)束時(shí)cur已經(jīng)變成Noneprev停在原鏈表的尾節(jié)點(diǎn)上。尾節(jié)點(diǎn)反轉(zhuǎn)后變成了頭節(jié)點(diǎn)它就是新鏈表的頭。建議畫圖走一遍輸入1 - 2 - 3 - None手動模擬指針變化。我在給學(xué)生講這塊時(shí)發(fā)現(xiàn)只要能在紙上完整畫出每一輪三個(gè)指針的位置迭代反轉(zhuǎn)就算真正學(xué)會了。4.2 遞歸反轉(zhuǎn)函數(shù)棧幫你完成一半工作遞歸法代碼更短但對初學(xué)者來說更難理解def reverse_recursive(head): if head is None or head.next is None: return head new_head reverse_recursive(head.next) head.next.next head head.next None return new_head理解遞歸反轉(zhuǎn)有兩個(gè)關(guān)鍵點(diǎn)。第一遞歸函數(shù)返回的是“反轉(zhuǎn)后的新頭節(jié)點(diǎn)”。假設(shè)鏈表是1 - 2 - 3 - None調(diào)用reverse_recursive(1)時(shí)它先調(diào)用reverse_recursive(2)后者又調(diào)用reverse_recursive(3)。最深層遞歸到節(jié)點(diǎn) 3 時(shí)3.next是 None直接返回 3此時(shí)3就是整條鏈表反轉(zhuǎn)后的頭。第二回溯時(shí)只看兩層。從節(jié)點(diǎn) 3 回到節(jié)點(diǎn) 2 那一層時(shí)head是 2head.next是 3。代碼做的事是2.next.next 2也就是讓 3 的 next 指向 2形成3 - 2然后把2.next置為 None防止出現(xiàn)循環(huán)。每一層都做同樣的操作最后整條鏈就反過來了。4.3 逆序操作里最容易踩的三個(gè)坑這個(gè)題幾乎每個(gè)新手都會踩坑我總結(jié)三個(gè)最常見的坑一返回錯(cuò)了節(jié)點(diǎn)。迭代法最后返回prev遞歸法返回new_head。有人寫迭代時(shí)圖省事返回cur但此時(shí)cur是 None等于返回了一個(gè)空鏈表打印出來什么都沒有??佣f歸深度過大。Python 默認(rèn)遞歸深度限制在 1000 左右鏈表長度超過這個(gè)數(shù)就會拋RecursionError。面試時(shí)用遞歸寫法沒問題但如果你在真實(shí)項(xiàng)目里反轉(zhuǎn)一個(gè)上萬元素的鏈表老老實(shí)實(shí)用迭代??尤税言瓉淼念^節(jié)點(diǎn) next 置空。反轉(zhuǎn)前頭節(jié)點(diǎn)變成了尾節(jié)點(diǎn)它的 next 必須指向 None。迭代法里因?yàn)閜rev初始是 None反轉(zhuǎn)后原頭節(jié)點(diǎn)的 next 自然變成 None沒問題。但遞歸法必須手動寫head.next None否則鏈表末尾會成環(huán)遍歷時(shí)直接死循環(huán)。5. 已知兩個(gè)長度為 m 和 n 的升序單鏈表合并操作的完整拆解5.1 合并升序鏈表的基本思路這個(gè)熱搜題給的背景是“已知兩個(gè)長度為 m 和 n 的升序單鏈表”任務(wù)通常是合并成一個(gè)升序鏈表。這是面試?yán)镦湵眍}的??鸵彩菤w并排序在鏈表上的基礎(chǔ)操作。核心思路一句話兩個(gè)鏈表同時(shí)從頭往后走誰的當(dāng)前節(jié)點(diǎn)值小誰就接到結(jié)果鏈表后面然后那個(gè)鏈表的指針往后走一步重復(fù)這個(gè)過程直到某個(gè)鏈表走完把另一個(gè)鏈表剩下的一整段接上。前提條件是兩個(gè)鏈表都已經(jīng)是升序的。如果其中一個(gè)為空合并結(jié)果就是另一個(gè)鏈表本身。5.2 迭代實(shí)現(xiàn)哨兵節(jié)點(diǎn)讓代碼變得優(yōu)雅def merge_two_sorted_lists(l1, l2): dummy ListNode() cur dummy while l1 is not None and l2 is not None: if l1.val l2.val: cur.next l1 l1 l1.next else: cur.next l2 l2 l2.next cur cur.next # 把剩余部分直接接上 cur.next l1 if l1 is not None else l2 return dummy.next這段代碼里的哨兵節(jié)點(diǎn)dummy發(fā)揮了巨大作用。沒有它你要費(fèi)心思判斷“結(jié)果鏈表的第一個(gè)節(jié)點(diǎn)到底是誰”有了它所有新節(jié)點(diǎn)一律掛在cur.next上最后dummy.next就是結(jié)果鏈表的頭。cur.next l1 if l1 is not None else l2這一行很巧妙。因?yàn)閮蓚€(gè)鏈表都是升序的剩下的部分也必然是升序的而且剩下來的所有節(jié)點(diǎn)一定比已經(jīng)接好的節(jié)點(diǎn)都大可以直接整段拼接。不需要再一個(gè)個(gè)遍歷。5.3 遞歸實(shí)現(xiàn)更短但不是所有場景都適合遞歸的思路更數(shù)學(xué)化比較兩個(gè)頭節(jié)點(diǎn)的大小小的那個(gè)作為結(jié)果頭節(jié)點(diǎn)它的 next 指向“剩余兩個(gè)鏈表合并后的結(jié)果”。def merge_two_sorted_lists_recursive(l1, l2): if l1 is None: return l2 if l2 is None: return l1 if l1.val l2.val: l1.next merge_two_sorted_lists_recursive(l1.next, l2) return l1 else: l2.next merge_two_sorted_lists_recursive(l1, l2.next) return l2遞歸方法和迭代方法的時(shí)間復(fù)雜度一樣都是 O(mn)因?yàn)槊總€(gè)節(jié)點(diǎn)都被比較了一次。但空間復(fù)雜度有區(qū)別迭代法只用常數(shù)個(gè)指針空間 O(1)遞歸法每一次調(diào)用都會占用函數(shù)棧空間最壞情況遞歸深度達(dá)到 mn空間 O(mn)。所以大數(shù)據(jù)量或者面試要求 O(1) 空間時(shí)用迭代。5.4 合并后的變種問題理解了基本合并幾個(gè)變種也就順了合并 k 個(gè)升序鏈表可以用“兩兩合并”的方式也可以借助最小堆每次從 k 個(gè)頭節(jié)點(diǎn)中取最小值。時(shí)間復(fù)雜度是 O(N log k)N 是節(jié)點(diǎn)總數(shù)。兩個(gè)升序鏈表求交集/并集思路和合并幾乎一樣只是拼接條件變成“值相等才接”“值小時(shí)移動指針”。合并后去除重復(fù)節(jié)點(diǎn)合并時(shí)如果發(fā)現(xiàn)cur.val和結(jié)果鏈表最后一個(gè)節(jié)點(diǎn)的 val 一樣就不接這個(gè)重復(fù)節(jié)點(diǎn)。面試時(shí)如果遇到這些變種題先在紙上寫出基本合并模板再改條件比硬背答案靠譜得多。6. 實(shí)操經(jīng)驗(yàn)?zāi)切┙?jīng)常讓人調(diào)一晚上的問題6.1 指針丟失鏈表世界里最貴的“手滑”指針丟失往往只有一個(gè)原因在連接新指針之前把舊指針提前覆蓋了。就像你搬家具先把舊柜子推倒再準(zhǔn)備搬新柜子結(jié)果舊柜子里的東西全散了。最常見的兩處插入時(shí)沒保存后繼。在中間插入節(jié)點(diǎn)如果先執(zhí)行prev.next new_node原來的prev.next指向的節(jié)點(diǎn)就找不到了后面整段鏈表全部丟失。正確做法是先new_node.next prev.next再prev.next new_node。反轉(zhuǎn)或換位時(shí)沒保存后繼。凡是“把某個(gè)節(jié)點(diǎn)的 next 指向別處”的操作都要先想清楚原來的 next 還有沒有人保存如果沒人保存先存到一個(gè)臨時(shí)變量里。判斷“會不會丟指針”我有個(gè)笨辦法每次寫完一個(gè)操作問自己一個(gè)連環(huán)問題——有沒有節(jié)點(diǎn)在操作后同時(shí)被兩個(gè)指針指向有沒有節(jié)點(diǎn)一個(gè)指針都不指向如果一個(gè)節(jié)點(diǎn)一個(gè)指針都不指向了要么它馬上被垃圾回收Python要么它就從鏈表里永久消失了。6.2 邊界條件空鏈表、單節(jié)點(diǎn)、頭節(jié)點(diǎn)和尾節(jié)點(diǎn)我在批改學(xué)生的實(shí)驗(yàn)報(bào)告時(shí)發(fā)現(xiàn)很多 bug 根本不是邏輯錯(cuò)而是邊界條件沒處理。鏈表題必須養(yǎng)成的肌肉記憶是每次寫完代碼立刻檢查四類情況鏈表為空head是 None遍歷循環(huán)一次都不執(zhí)行。鏈表中只有一個(gè)節(jié)點(diǎn)循環(huán)條件cur.next和cur的區(qū)別會在這里暴露。操作頭節(jié)點(diǎn)插入、刪除、反轉(zhuǎn)都需要單獨(dú)看頭節(jié)點(diǎn)邏輯是否成立。操作尾節(jié)點(diǎn)cur.next is None的處理比如在刪除時(shí)要把前驅(qū)的 next 置為 None而不能是野指針。一個(gè)偷懶的通用解法給鏈表加哨兵節(jié)點(diǎn)。有了dummy空表和頭節(jié)點(diǎn)特判基本都能消除。我刷題時(shí)幾乎每個(gè)關(guān)于刪除、插入、合并的題都會先定義一個(gè)dummy ListNode(0)省下大量腦力。6.3 Python 和 C 在鏈表操作上的差異很多教材用 C 語言講鏈表你照著寫成 Python 時(shí)會有幾個(gè)明顯差異照著下面這個(gè)表對照檢查就行操作C 語言Python節(jié)點(diǎn)定義struct typedefclass指向下一個(gè)指針變量對象引用空鏈表判斷head NULLhead is None刪除節(jié)點(diǎn)手動 free(node)自動垃圾回收訪問字段node-nextnode.next指針運(yùn)算支持不支持Python 沒有指針運(yùn)算所以“鏈表的 next 指向誰”就體現(xiàn)在引用賦值上。另外 Python 里一切變量都是對象引用寫new_node old_node之后改任意一個(gè)的 next另一個(gè)也會跟著變除非你顯式創(chuàng)建一個(gè)新節(jié)點(diǎn)。這個(gè)特性在 C 里不容易搞混Python 里容易踩。6.4 調(diào)試鏈表的幾種實(shí)用手段鏈表出 bug 時(shí)不要用眼睛硬摳代碼。我通常按這個(gè)順序來先打印。在每次循環(huán)末尾打印當(dāng)前鏈表所有節(jié)點(diǎn)的值看哪一步開始不對。這個(gè)方法最土但最有效。為了打印方便提前寫好display函數(shù)平時(shí)無所謂調(diào)試時(shí)它就是你的命根子。再畫圖。在紙上把幾個(gè)關(guān)鍵節(jié)點(diǎn)畫成方塊上面寫數(shù)據(jù)下面寫 next 指向手動模擬代碼一行行執(zhí)行。特別是反轉(zhuǎn)、插入、刪除這類改指針的操作畫一遍基本就能定位問題。最后寫測試用例。不要只測正常鏈表把空鏈表、單節(jié)點(diǎn)鏈表、兩個(gè)節(jié)點(diǎn)鏈表、目標(biāo)在頭節(jié)點(diǎn)、目標(biāo)在尾節(jié)點(diǎn)這五類情況都測一遍。很多邊界 bug 都是這樣測出來的。鏈表的問題幾乎都是“畫一畫就通了”的問題。很多人覺得鏈表難其實(shí)是卡在“不動筆只動腦”。你如果真的拿紙筆把指針的變化從頭到尾畫上幾遍后面再遇到環(huán)形鏈表、雙向鏈表、跳表上手都會比身邊人快一大截。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久精品导航| 天天综合网合集91| 一二三区精品视频| 色综合久久888| 亚洲资源网| 国产高清成人免费视频| 欧日a| 亚洲欧美性生活| 蜜臀久久在线视频| 91丨豆花丨熟女| 欧美性,色九九| 精品人妻一区二区三区免费视频| 尤物国产一区在线观看| 性老妇一区二区三区| 91天天综合日韩欧美| 成年女人18级毛片毛片免费观看| 超碰一区二区| 强奸乱伦αv片| 91影视亚洲| 国产精品麻豆视频网站| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 99re这里只有精品2| 久久中文字幕一区不卡| 色女综合| 美女熟妇色| 欧美成不卡网| 中文字幕三四区| 日本天堂网| 亚洲日韩av专区无码| 日韩乱码av| 久久在肏| 大稥蕉免费视频这里只有精品| 蜜臀久久99精品久久久久久无删减 | 97超碰人人操人人操| 一区二区三区四区色图| 草草草视频| 人妻熟女字幕一区二区| 欧美精品三级黄片| 人妻精品一区二区三区| 欧美在线视频99| 男人的天堂va| 宅男午夜在线视频| 金莲网址| 襙一襙| 秋霞鲁丝午夜无码一区二区三| 天天草夜夜草高潮片| 亚洲一区亚洲天堂| 国产一区二区啪啪视频| 天天综合中文字幕 91| 日本在线不卡一二区| 精品久操| 国产精品密臀网在线观看| 女人被男人桶爽视频网站| 亚洲91综合| 日本精品一区二区中文字幕| 精品一区二区三区丰满熟女-亚洲欧美一区| 免费观看啪视频| 男女国产精品| www久久精品| 五月丁香综合| 大香蕉一级黄色片久久| 久夜操| 青娱乐导航AV| 99热精品在线观看| www黄片免费看com| 久久久久久9| 男人网站婷婷| 欧美制服网站美腿丝袜| 久久九色| 黑人无码一区二区| 久久久久少妇| 噜噜噜亚洲精| 情侣操 逼视频99| 午夜男女爽爽爽在线视频| 亚洲婷婷丁香在线| 亚洲丝袜综合| 三级色影综合网| 91偷拍欧美亚洲| 全球成人中文在线| 日本色色色色色视频| 蜜臀久久99精品久久久久久酒店| 欧美激情 亚洲色图| 国产亚洲日本| 亚洲欧洲无码97久久精品| 夂久色| 九九视频黄色片| 亚州性9| 久久久久久中文版| 91欧美www| 久操在97| 9长久久精品| 91中文精品日韩欧美在线| 婷婷丁香五月激情啪啪| 91在线精品| 色综合V| 91亚洲欧美| 97超碰美女| 欧美亚洲天天| 成人青青草原伊人| 青青久久艹| 中出20p| 精品9999| 日本幼女18+| 欧美一品道| 九九夜精品九九在线| 久操高青| 五月天综合在线| 91精品无码人妻系列| 精品人妻一区二区视频| 乱伦1色页| 人人摸人人摸人人干| 蜜乳中文字幕a在线| 国产精品免费久久久久久久久久| 超碰欧美97| 好属操| 欧美大片91| 伊人久久AV诱惑悠悠| 精品国产乱码久久久| 日本 情色 1区2区3区| 97超碰精品成| 91熟女丨老女人| 欧美性色网| 竹菊一区二区三区AV线| 四虎在线视频| 丰满人妻一区二区三区| 国产无马在线| 操逼视频亚洲| 淫淫总合网| 夜夜爽77777| 麻豆天美久久91| 亚洲一二三精品久久网| 国产女人9999| 啊啊啊慢点| 日韩啪啪视频| 啊啊啊啊嗯嗯嗯用力好爽| 亚洲成人在线播放| 四虎884a| 中文字幕成人乱码熟女精品国50 | 超碰在线欧美性爱激情| 91在线超高颜值国产| 国产女人和拘做爰视频| 久久99视频| 久久伊人在线五区| 91丝袜在线观看| 18禁看网站一区| 欧美日韩性爱无码| 国产久久久9999| 色天堂综合| 超碰 国产熟女精品一区| 亚洲另类春色| 亚洲欧美国产其他二区| 97欧美精品综合| 风骚少妇视频中文字幕| 黄片com.| 有码免费观看| 俞拍久久国应视频| 欧美亚洲| 操人妻逼91| 久久久极品| 女同女同恋久久级三级| 日韩国产品视频中文字| 色月天AV导航| 人人操,人人液| 十八岁啪啪视频免费看| AV天堂电影网| 精品综合久久久久久五月天| 精品久久久亚洲AV成人网站| 天操老女人| 大香蕉狠狠爱| www.色婷婷色综合| 四虎在线观看网站| 亚洲?V无码专区在线电影| 国产亚洲精品自在线亚洲情侣| 日韩精品操少妇| 青草成人免费视频一COm| www.久久制服糖| 蜜桃久久一区二区三区| 亚洲情色无码一区二区三区| 欧美另类精品xxxx| 精品国产99| 国产精品九九九| 中文字幕在线高清男人的天堂| 一本道综合色图| 91色伦| 中文字幕交换人妻| 91夜夜蜜桃臀1区2区3区| 日韩性爱1级片视频| 97亚洲欧美日韩| 操国产高清| 人人操AV| 丁香九月婷婷| 亚洲综合113页| 国产精品ⅴ无码大片在线看.| 亚洲男人的天堂一区二区| 伊人网高清| 操操逼操操逼操操逼逼| 色情婷婷久久五月天| 变态乱伦伪娘灌肠一区二区| 亚欧美综合网。| 亚洲欧美日韩免费电影| 超碰98综合网| 狠狠热这里都是精品| 精品一区二区三区麻豆| 久久久999网站| 日B操| 99青青草国产视频| 日韩欧美午夜视频在线| 视频二区美腿制服人妻欧美| 又黄又爽在线观看视频| 内射小黄片| 天天躁狠狠躁av| 亚洲五码一区二区三区| 久久久一区二区三区麻豆| 亚洲人妻一区二区三区| 亚洲学生妹高清av| 日本天天干天天日一区| 亚洲91av| 一区二区影院| 久久αⅴ| 天天操美美| 久久久久国产精品片区无码直播| 好爽视频在线观看视频| 日欧毛片久久| 久久激情视频| 日韩视频啪啪| 大学生美女口爆| 欧美日韩精品国产91| 国产aⅴ无码片毛片一级网站| 九九人妻| 免费看污网站| 国产精品99久久久www| 日日操夜夜操天天操免费观看麻豆| 天天操女人| 亚欧Av| 亚洲中文字幕在线视频一区二区| 久久蜜色情在线视频xxx免费观看| 蜜乳性色无码专日粉嫩骚逼AV| 中文字幕福利视频一区二区三区在线观看| 亚洲性少妇| 欧美另类色图片| 亚洲国产奇米影视久久| 操东北女人| 九九九九免费高| 人妻久久久久久久久久久久久久久| 日韩综合无码色欲vv| 91美女精品| 天天综合麻豆视频| 九九国产| 国产精品久久久久久夜夜夜| 日本三级韩三级99久久| 五月综合婷婷久久网站| 一起草三级AV电影在线观看| 青青草公开在线免费不卡视频| 日日夜夜国产综合| 色色99| 日本三级R| av强奸乱轮| V A在线| 欧美日韩久久精品爱爱| 日韩国产九九精品一区二区三区毛片| 精品美女少妇一区二区三区| 天天日B狠狠操| 人人操肉肉| 99婷婷一区二区| 亚洲熟女诱惑| 蜜臀久久99精品久久久久久酒店| 超碰 欧美| 日韩高清一二三| 久久久工口| 色五月激情综合网| 五月天成人综合| 国产AV高清AV无码| 国产精品久久久三级无码| 国产强奸91| A 天堂| 国产精品久久久啊| 欧美高清18A片| 东北女人无套内谢视频| 乱伦强奸区日韩| 日韩视频中文字幕| 国产在线观看91精品一区| 五十路熟女人妻一区二区三区四区五| 五月丁香社区婷婷日韩欧美精品影院| 成人三一级一片aaa| 热久久国产| 神马午夜久久| 夜夜操青青草| 91高清无码下载| 久久人人舔人人爽舔人人av片| 日本操色导航| 日韩AV一起草| 91男女啊啊啊| 日日黄色三级网站| 极品出轨视频网站| 丝袜亚洲综合| 国产精品久久久久久片| 黄色视频特级毛片| 密臀在线免费观看| 久久噜噜噜精品国产亚洲综合| 亚洲色9| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 亚洲97超碰| 欧美综合网在线| 精品国产三级av韩国在线| 国产午夜精品理论片一二三区区| 精品国产一区二区三区香蕉欧美| www.色操逼| 久草综合京东| 丝袜天堂| 欧美精品黑人猛交高潮| 日韩欧美亚洲自拍偷拍| 性色av网站| 色五月大香蕉| 欧美青青视频| 秋霞怕怕片| 在线综合色| 亚洲nv男人的天堂网| 蜜桃久久久久久久| 美女性91| 无码国产精品久久久久| 男人的天堂成人的社区| 欧美色图99| 强被迫伦姧在线观看无码网站| 国产AV色黄看到爽| 搡老女人老妇女老妇老熟女怎么读| 伊人一区二区三区| 91精品91久久久中77777| 色操逼网| 夜色五月天| 熟女露脸激情自拍视频| 欧美亚洲| 亚洲 欧美 中文 日韩超碰| 国产AB视频| 88xx成人精品视频| 国产激情久久久| 农村妇女精品一区二区| 久久精品熟妇丰满人妻99| 亚洲成?V人片在线观看福利| 91丝袜美女| 亚洲av资源| 黄色视频特级毛片| 久久久111| 伊人专区一区二区三区| 99热综合| 欧美se综合| 国产亚洲精品美女久久久m| 91国产精品熟女| 78久久| 韩国黄色片精品久久久| 人妻少妇精品久久久| 思思热在线视频在线| 开心激情婷婷| 国产嫩草精品A88AV| 91久久精品蜜臀| 操逼短片| 日本精品一区二区中文字幕| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 国产91亚洲精品一区二区三区| 欧美日韩第一页| AV中文字幕剧情1区2区3| 国产婷婷综合在线观看| 日韩三级在线观看mp4| 91精品人妻一品二品三品| 全免费a敌肛交毛片免费| 综合91网| 婷婷五月综合在线| 色老大| 开心五月激情网| 欧美九一精品久久久熟妇| 国产熟女完整版中字| 亚洲精品骚逼| 天天搞在线综合网| chaopen97久久| 国产第25页在线观看| 日韩无码久久熟女一级片| 久久久久久久九九九九九九| 久久夜夜夜| 欧美操逼熟女| 加勒比性爱成人在线| 无码国产精品久久久久| 欧美色交| 91大胆欧美| 国产高清亚洲日韩一区| av优播| 精品九九九九九九| av情色影音| 91人妻最真实刺激绿帽| 伊人在线大香蕉二。| 777奇米影视777四色| 日韩欧美中文字亚洲慕| 色色色色网站| 中文字幕人妻丝袜乱一区三区| 天天综合网站| 收看日本人日bb| 亚洲。天堂。日本在线观看| 国产久久一区二区午夜| 欧美性爱无码一区二区三区| 夜夜骑日日| 91校园春色长篇| 男人的天堂久久| 自拍鲍鱼一区在线高清观看免费| 天美传媒AV在线| 国产熟女一区二区丰满| 欧美啪啪女女| 午夜a成v人电影| 中出91视频| 欧美爆操91| 操比国产| 亚洲欧美综合区自拍另类| 91白虎| 91新在线欧美| 婷婷91| 97在线精品观看视频| 少好三P| 欧亚在线视频| 超碰精品国产无码| 超碰诱惑| 亚州欧美总和| 歐美一級亂黃99在綫精品| 熟女人妻一区二区三区| 天天爽夜夜爽夜夜爽精| 亚洲黑人在线| 精品国产乱码久久久影院| 亚洲天堂女优在线| 久久女人一区二区三区| 女人双腿搬开让男人桶| 久久久久人妻二区精品叶可怜| 欧美人妖内射| 天堂资源站| 91亚洲不卡一区| 亚洲色诱惑| 欧美日本成人一区二区| 欧美午夜熟妇黑人精品91| 九一精品牛牛一区二区| 久久久久精| 激情视频网址| 亚洲一区中文字幕一区| 国产欧美岛国精品一区| 国产精品盗摄 偷窥盗摄| 蜜臀久久99精品久久久久久酒店| 中文字幕av一区二区三区人妻少妇| 亚洲情色图片区| 九九热免费国产视频婷婷伊人五月 | 久久精精区一区二区一蜜桃一区二区| 亚洲中文字母在线播放| 夜间福利片1000无码| 大香蕉乱级| 日韩超碰97| 中文字幕青青草| 色一区二区三区综合| 涩涩久久精品| 久草草一二三四区久久| 亚州 综合 色图| 国产精品91ai| 诱惑人妻欧美一区在线播放| 亚洲国产一级中文综合久久天堂在线免费观看| 久久99国产综合精品女同| 日韩AV一区二区三区四四| 亚洲国产一区二区三区四区国产| 欧美强奸一区二区诱惑| 黄色视频特级毛片| 啪啪AV导航| 可以免费观看的日韩av毛片| 91天堂色男人的天堂| 91动漫操逼视频| 九九九九日本 | 久操影视| 9美女超碰在线免费观看| 日本亚欧爱爱| 亚洲97综| 九九精品99| 日日操丁香五月天| 2020国产精品| 精品女人999| 欧美人妻二区三区| 丝袜高跟澳门91视频| 色香综合天天影视综合| 天堂亚洲精品久久老牛| 揉揉揉夜夜| 国产精品操| 国产精品久久久啊| 日日操丁香五月天| 五月丁香婷婷综合| 天天综合网国产| 在线观看A啊啊啊| 9精品久久| 亚洲久久天堂| 99久久精品国产系列| 国产美女销魂在线观看不卡| 国产视频一区二区免费| 九九热免费国产视频婷婷伊人| 亚洲 图片 欧美 色图| 午夜福利一区二区三区四区五区色婷婷| 精品人妻一区二区三区四区| 日韩97P| 人妻少妇被猛烈进入中| 97人人操人人干| 久久综合久久综合人久久夜精品| 97欧美色| 久久精品国产亚洲妲己影视| 狠狠爱综合| 精品久久久久瑟瑟| 精品丰满熟妇人妻一区| 欧美日韩黄片精品在线| 99热超碰在线| 精品二999| 97日韩| 美国日韩黄色片| 蜜桃中文字日产乱幕4区| 区二区亚洲婷| 91热色| 中文字幕精品一区二| 国内三级自拍小视频在线观看| 啊嗯好大视频在线观看| 久久久久久久久9| av无线看| 国产久久一区二区三区野外在线| 亚洲性综合11| 不卡一区二区日本视频| 99re只有精品| 日韩中文字幕国产| 人人操天天爽| 综合久久97| 亚洲日韩一区电影| 国产白丝网站| 青草视频在线看看看看看看看看看| 欧美大干日韩| 久久国产热视频97电影| 亚洲第一二区另类图| 亚洲在线网站| 亚洲城人男人的天堂| 碰碰97| www.狠狠操| 久插综合| 人人妻人人玩人人澡人人爽| 狠狠干婷婷| 9久久久久久| 国内精品久久久久影院亚洲| 加勒比久久av| 新版天堂中文资源8在线| 天天舔天天日天天射| 日逼逼免费看| 久久噜| 欧美性爱网97| 激情综合网亚洲| 国产有码一区| 国产传媒午夜理伦精品| 久久久中文版| 亚洲国产婷婷在线播放| 欧美高潮| 人妻精品视频一区二区| 国产视频大全| www.av在线观看| 国产av色网| 精品人妻美妇91job| 色99久草| 色噜噜狠狠色综无码久久合欧美| 日本二三四区| 日韩性色b| 伊人五月天婷婷| 99re9这里只有精品| 欧美十八禁视频| 亚洲视频二区 | 人、人、摸,人、人、草| 亚洲亚洲亚洲天堂天堂| 亚州精人品大香蕉| 免费日韩黄片| 亚洲中文字幕久久无码精品| 啊a一区在线| 人人 操人人 操人人| 精人妻无码一区二区三区伊人直播| 一级免费啪啪片| 试看60秒 爽| 久久婷婷在线观看视频| 久久久久成人亚洲国产| 亚洲激情视频| 久久久久国产| 天美av在线观看| 国产日韩在线播放av| 性生活性生大爱77AV国产| 天天爽爽爽爽| 操逼视频亚洲| 高清国产精品福利网站| 热热色国产一二区AV| 婷婷久草一区二区三区| 一区二区三区机械有限公司| 日本大香蕉| 97超碰人操| 亚洲影院365| 99爱久久视频频| 欧美综合中文| 91久久国外网| 国产极品999| 日韩精品人妻中文字有码在线| 国产熟女高潮一区二区三区| 日逼97| 久久久精品网站| 精品无码不卡视频| www.夜夜| 日本好吊色视频| 色爱亚洲| 99在线无码精品秘 入口黑人| 日韩中文字幕二区| 长长久久88视频| 91九九九小逼| 91日韩网站| 亚洲在线网站| 久久久久久久久久8888| 激情文学欧美| 免费亚洲黄色视频在线观看| 99热超碰| 国产丸一视频| 无码动漫av中文字幕| 国产成人综合在线播放| 亚州情色j区| 春色综合免费| 福利社区午夜一区二区| 五月天婷婷欧美三区| 一道本东京热加勒比一区二区三区| 免费亚洲国产精品久久一区| 色五月AV| 九九热精品在线| 超碰97在线中文| 黄色AV免费| 91爱综合| 欧美亚洲系列| 国产剧情AV不卡在线观看| 伊人久久大香蕉线AV五月天| 国产精品操| 99日精品欧美国产| 久久久免费懂色| 家庭乱伦国产精品| 国产精品交换一区二区| 久久久久久免费电影| 亚洲天天做日日做天天谢日日| 六月丁香啪啪| 97精品视频在线| 国产精品免费日韩| 国产SV一线| 天美传媒精品一区二区| 国产精品久久久久无码AV会牛| 97超碰久久色| se吧提供91精品国产91久久久久久| 中文字幕日韩综合| julia国产在线| 亚洲九月丁香| 国产第二页| 国产高清精品一区二区三区毛片| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 成人26uuu| 九九热精品免费视频| 国产精品一区二区三区四区五区| 97福利视频| 91高清欧美| 久久xxxx| 97碰久久| 99热97| 91久久久亚洲| 欧美日本久久精品一区| 性爱综合一区二区| 中文字幕精品乱码| 色成人Www精品永久观看| 色眯眯av| 九九RE视频在线精品| 精品国产乱码久久久影院| 95自拍视频在线观看| 日本精品久久久久久久| A 天堂在线观看视频| 一区超碰一区| 男人的天堂啪啪啪啪啪蜜桃不卡| 久操97| 九九热免费在线国产视频伊人五月| 凹凸视频在线一区二区| 欧美亚州综合图片| 黑人精品成人一区二区三区 | 激情婷婷五月天| 亚洲欧美另类小说| 99热在线不卡| 国产精品香蕉热久久新品| 欧美在线电影| 欧美色图私拍91| 黄色小视频日本txt| 清纯唯美综合亚洲| 影音先锋国产精品| 无遮挡又黄又刺激的视频| 天美传媒Av在线| 偷窥自拍A片| 亚洲午夜未满十八勿入网站日本又色又爽又黄| 欧美美女在线高潮999| 午夜爽爽爽在线观看永久入口姬片| 伊人9| 亚洲精品一二三四区| 欧美 日韩 亚洲 春色| 好看的久久不射无码影视影院| 日韩在线观看字幕精品| 先锋女优在线观看视频| 人妻 欧美 中文| 日本免费亚洲欧美| 亚洲欧美另类激情小说| 亚洲一区制服诱惑| 天美国产精品| 欧美人妻一区| 亚洲熟伦熟妇AV无码春色| 爱丝福利| 三级片大波波| 立川理惠加勒比无码| 色淫网站优优视频| 中文字幕日韩人妻视频一区二区三区交换夫妻| 国产精品一区二区黄片| 人人干人人操人人爱| 丰满少妇精品一区二区| 东京成人一区| 色婷婷狠狠| 免费又黄又裸乳的视频| 91熟女在线| 97欧美色综合| 2025亚洲男人天堂| 色优久久| 在线观看中文av字幕| 国产欧美另类久久久精品课程| 欧美激情片一区二区| 久久综合99| 午夜爽爽爽在线观看永久入口姬片| 国产福利合集| 色97国产69香蕉| 91五月天| 日韩AV色图| 亚洲一区二区麻豆影院| 牛黄色久午久| 久久九九视频九九视频| 日韩精品一区二区高清| 欧美天天综合网| 欧美色图人妻| 欧美精品偷拍| 欧美精品成人亚洲| 99这里都是精品| 中国亚洲呦女专区| 国产无马视频| 国产精品黄色三级av| www.亚洲黄色| www熟女乱伦com| 97伊人超碰| 一级免费精品| 熟女熟妇一区二区三区视频| 日韩美女高潮喷水视频| 丰满搜索结果 -第18页- 久久高清无码 | 色哟哟的毛片| 99re国产中文字幕| 精品黑人一区二区| 无码国产精品久久久久| 国产精品久久99日日| 99国产精品自在自在| 操一对老熟妇爽上天视频| 欧美精品宗合| 黄色性爱网网| 久久精品免费| 欧美亚洲特P| 欧美日韩不卡a片| 操狠狠| 色色青青久久| 人人操人人爽人人操人人| 思思在线免费视频| 青青草久久一区网| 伊人久久AV诱惑悠悠| 久久免费精品视频免一| 精品97精品97| 国产精品白丝| 激情网五月天| 久久精品91| 无码不卡八戒| 天天添天天干电影| 亚洲欧美综合图片| 日韩午夜精品一区二区三区电影| av操操不卡| 欧美高清色| 日韩AV一起草| 亚洲诱惑天堂 | 国产视频小说| 伊人专区一区二区三区| 日本三级久| 久久久91| 乱论91| 超碰公开久久网| 日日玩天天干| 日韩A优精品在线观看| 色女99一级片在线观看| 私人尤物在线精品不卡| 嗯嗯嗯啊啊啊在线免费观看| 99999国产精品| 少妇一线天久久久久久| 一区二区视频在看| 99久久久| 亚洲色宗合| 美女超碰978| 欧亚日韩中文在线| 欧美|91色综合| 久久78| 蜜臀亚洲中文| 欧美日韩国产成人高清| 黑丝日韩av丝袜av| 国产免a费看黄片在线| 亚洲涩图欧美| 亚洲图片欧美在线视频| 极品少妇久久久| www四虎| 中国操逼无码| 极品AV网站在线观看| 婷婷中文网| 亚洲天堂加勒比| 校园春色 男人天堂| 天天干夜夜鈤| 亚洲人在线成线成人| 最新国内自拍av免费| 91n免费处女| 婷婷亚洲综合| 欧美激情综合| 精品网站99999| 91天堂色男人的天堂| 蜜臀久久99精品久久久久电影| 亚洲激情四射| 美日韩男女操屄视频| 四虎在线播放| 激情丁香婷婷| 人人爱人人乐人人操| 亚洲综合性网址| 国产 丝袜 欧美中文 另类| 夜夜爽夜夜高潮夜夜爽| www.一本大99| 日操粉逼逼| 大香蕉狠狠爱| 麻豆性爱视频在线播放| 国产精品久久久久久 百度| 色臀AV| 激情亚洲天堂| 欧美在线观看综合国产| 亚洲色阁| 久久有码| 色激情五月天| 两女互慰AV高潮喷水在线观看| 亚洲高清男人天堂| 1024久久高清视频| 日韩国产欧美伦理在线| 亚欧洲日韩国产精品| 嫩草 人人网精品| 美国一区二区免费视频| 亚洲不卡三级手机播放| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 久操97| 久久久不卡区一区二区三区久久久| 爽极品影院| 亚洲欧美骚| 日韩久久艹| 天堂种子在线www网资源| 91 丝袜在线播放| 97色诱| 亚洲综人| 婷婷丁香久久| 日本黄色精品专区网站| 91热| 亚洲日韩久久精品一区| 蜜臀久久久久久999| 强奸乱伦中文字幕AV| 欧美综合自拍| 熟人人妻少妇精品久久| 日本九九久久99| 久久天天摸| 国产99 中文字幕日韩小视频| 欧美日韩大香蕉| 97欧美综合网| 91亚洲丝袜| 国产白嫩精品久久| 国产精品69久久久久孕妇欧美| 日韩AV中文字幕电影| 婷婷色在线| 国产剧情AV不卡在线观看| 国产精品久久aV| 日韩9区| wuyechaopeng| 亚洲一本色码中文字幕| 97精品国产97久久久久久户外免费| 性在久久久久久| 成人午夜高潮av猛片| 91亚洲电影| 超碰吊日色| 久久久久人| 加勒比东京热五月天天堂网| 午夜啊啊啊| 一区二区三区四区五区高清无码永久视频 | 人澡逼| 龙兴卡官方查询| 午夜福利在线视频1000| 人妻无码后入| 青青草日逼视频| 国产av青草| 嗯嗯嗯嗯啊啊啊好紧好大| 欧美日韩性感| 国产欧美精品日韩区二区麻豆天美| 操逼日韩无码| 97在线精品| 开心五月深爱五月| 久久人妻丝袜一区二区三| 久久女婷| 久久九九99| 99这里只有精品| 婷婷五月天色| 久久久无码国精品无码三区三区| 综合色色婷婷| 久久人妻视频网| 亚洲男人bt天堂| 中文字幕一区 二区三四五 区日 日骚| 五月丁香啪啪啪| 涩涩五月天| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 天天流夜夜操| 啊啊啊啊啊在线观看网址 | 97欧美久久久久久久| 综合情欲网| 这里都是精品| 亚洲国产精品无码AV久久| 天天看夜夜看日日干| 久久无码一区二区二三区性色| 日韩黄片视频试看| 成人午夜小视频手机在线看| 日韩在线观看中文字幕视频| 99色综合| 91蜜臀在线久久久久| 女一区二区| 日日骚精品视频| 欧美成97爱| 日本操逼视频在线| 色黄色美女大长腿午夜视频| 最新啪啪视频| 久久超碰爱| 综合色图亚洲欧美| 熟女啪啪视频| 色狠人在线99| 欧美中文狠| 欧美性五月| 亚洲情色欧美| 91午夜无码| www狠狠| 精品免费1| 亚洲无限观看| 夜夜欧美| 综合av社区| 强奸乱伦动态污图免费| 久久久久骚| 97热视频在线观看| 亚洲激情视频| www.91理论| 国产乱码久久| 色天欧美| 久久久96| 亚洲乱码国产乱码精网站| 亚洲熟妇自偷自拍另欧美| 一区二区三区四区久久视1| 深爱伊人影院| 人人操我人人干| 在线另类| 久久国语| 91日韩国产欧美亚洲另类精盘州至城都| 欧美熟妇成人一区二区| 色999亚洲人成色| 丝袜亚洲91| 亚洲爽图| 怡红院一区二区熟女人妻| 欧美少妇一区二区三区| 亚洲 无码 有码 中文字幕| 秋霞色色影院| 日本久久天堂| 91n免费处女| 91视频精品| a久久| 亭亭在线资源| 久久草草亚洲蜜桃臀| 久久久婷婷| 精品中文日韩字幕视频| 囯产精品久久久久久久久久梁医生 | 99色色网| 在线情色电影 91大 | 亚州春色| 国产精品久久久啊| 久99视频| 日韩专区久久久| 色欲av一区二区三区蜜芽| 人人妻人人爽一区二区三区| 高潮毛片无遮挡高清免费| 亚洲人精| 男人的天堂一区| 亚洲免费人妻在| 青青草国产盗摄一二三区| 97超碰碰| 爱爱动态120秒| 男人的天堂视频精品乱在线| 国产浮力影院第1页| 美欧老女人97| 成 人 A V免费视频在线观看| 五月色综合| 欧美天天影院| 精品人妻美妇91job| 久草久日| 国产亚洲禁久一区二区| 在线观看视频91| 日韩偷拍一区二区三区 | 国产极品99热在线播放69| 青青操在线亚洲视频观看欧美在线| 日韩少妇无码| 96久久科窝| 日本一二区不卡| 亚洲nv男人的天堂网| 四方色播| 日韩天美| 日韩精品人妻| 97久久资源| 网友自拍第一页| 志村玲子视频一区二区| 五月天伊人网| 欧美 亚洲 偷拍自拍| 精品无码一区二区三区| 欧美日本中字另类在线| 国产久久男人天堂| 国语精品内射在线观看| 中文字幕精品亚洲熟女| 中文久久爆乳| 超碰天天去日穴| Julia在线播放亚洲久久| 91成人亚洲色图| 桃花色涩综合影院| 91 天天综合| 丁香婷婷久久 | 国产亚洲色婷婷99精品91| 思思热免费在线视频| 人妻密肉在线观看| 亚洲A曰本VA欧美VA视频| 麻豆视频test| 91老熟女视频| 久久久久久久久九九久孕交| 国产美女高潮视频| 亚洲暴力强奸AV| 中文字幕第二页| 猛交交| 欧美精品精品一区二区| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 美女午夜福利免费视频| 夜夜嗨一区二区三区三州加勒比| 天天日天天舔| 国产精品久久久吖| 99re这里| 丝袜美腿制服人妻二区中文字幕| 青青草色AV| 操我啊啊啊啊啊| 国产精品爱欲| 韩日精品福利视频一区不卡在线免 | 狠狠色噜噜狠狠狠狠狠色综合久久| 激情文学亚洲| 91暧暧| 日本成人电影资源网| 亚洲人妻精品一区二区| 久久夜夜夜夜| 黄片www.| 国内毛片欧美香蕉精品| 久久久久久久9最新免费视频观看| 婷婷尹人大香蕉免费| 特级特黄一级毛片免费| 亚洲图片欧美偷拍| 91人妻超碰| 殴美在线AⅤ| 国产老太乱伦一区| 经典丝袜一区| 亚殴在线| AV无码久久久精品| 中文字幕欧美日韩三级| 99热大香蕉伊在线| 嗯嗯啊中文字幕| 国产专区第一页| 女色综合| 少妇高潮喷水无套久久久久久| 国产色呦呦| 97碰碰色| 情色av电影| 97人人草| 国产女人高潮嗷嗷嗷叫小说 | 少妇无码av专区线| 麻豆成人影音在线| 97超碰中文| 成年男人的天堂| 丁香色五月 97干| 亚洲āv网址在线观看| 97视频在线免费播放| 日本人体九九九九九九| 岛国福利在线精品播放| 九九亚洲色在线观看| 亚洲综合影视| 色乱二区| 在线岛| 强奸乱伦 亚洲一区| 大香蕉中文201| 婷婷久草| 精品小视频在线| 色爱国产| 国产树林里野战在线看| 欧美亚洲第一页| 大二网站亚洲| 深夜福利黄片| 亚州色综合| 国产97av| 综合亚州欧美| 伦理日韩国产久久| 欧美夜色| 一本大道综合伊人精品热热| 亚洲熟女乱色| 涩涩五月天| 大香蕉520| 婷婷中文网| 一个人免费HD91视频| yellow网站免费观看日韩高清无码| 操逼无码操逼| 日韩精品资源专区二区| 亚洲 欧美 精品专区 极品| 2017天天拍大香蕉| 色臀AV| 色香天天| 91女优在线观看 | 欧美亚洲厕所精品偷拍91 | 国产超碰| 91久热| 天天色粽合合合合合合合| 国产亚洲在线观看| 五月天开心网| 国产色呦呦| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 欧美后入式| 深爱伊人影院| 男人的天堂com| 福利视频网站| 激情五月天中文字幕色| 老熟女乱伦片| 国产精品原创巨作?v网站| 中文字幕一区二区日韩网| 宅男影院久久久,99| 伊人久久综合影院精品久久久| 蜜桃狠狠色伊人亚洲综合网站| 欧美视频一区二区三区| 嗯嗯,好大,好爽,好骚 | 东京热综合久久一区二区| 老司机香蕉| 精品免费视频国产一区| 三级特黄60分钟播放| 立川理惠加勒比无码| 色999亚洲人成色| 色眯眯射| 夜夜无码| 国产中出内射一区二区| 日婷婷| 久草福利在线资源站| 蜜桃成人1区2区3区| 熟妇国产免费一区| 四虎精品永久在线观看| 日本伦乱九九九综合| 久久九九国产精品|