成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

聊一聊合并兩個排序的鏈表

開發 前端
當p1節點指向null時,合并后的鏈表節點就為p2所指向的鏈表節點;當p2節點指向null時,合并后的鏈表節點就為p1所指向的鏈表節點。

前言

給定兩個遞增排序的鏈表,如何將這兩個鏈表合并?合并后的鏈表依然按照遞增排序。本文就跟大家分享一種解決方案,歡迎各位感興趣的開發者閱讀本文。

思路分析

經過前面的學習,我們知道了有關鏈表的操作可以用指針來完成。同樣的,這個問題也可以用雙指針的思路來實現:

  • p1指針指向鏈表1的頭節點
  • p2指針指向鏈表2的頭節點

聲明一個變量存儲合并后的鏈表,比對兩個指針指向的節點值大小:

  • 如果p1指針指向的節點值比p2指向的值小,合并后的鏈表節點就取p1節點的值,p1指針繼續向前走,進行下一輪的比對。
  • 如果p2指針指向的節點值比p1指向的值小,合并后的鏈表節點就取p2節點的值,p2指針繼續向前走,進行下一輪的比對。
  • 當p1節點指向null時,合并后的鏈表節點就為p2所指向的鏈表節點;當p2節點指向null時,合并后的鏈表節點就為p1所指向的鏈表節點。

圖片

實現代碼

看完上述分析后,聰明的開發者已經想到代碼怎么寫了。沒錯,這就是典型的遞歸思路,代碼如下:

  • 聲明一個函數MergeLinkedList,它接受2個參數:遞增排序的鏈表1,遞增排序的鏈表2。
  • 遞歸的基線條件:鏈表1為null就返回鏈表2,鏈表2為null就返回鏈表1。
  • 聲明一個變量pMergedHead用于存儲合并后的鏈表頭節點。
  • 如果當前鏈表1的節點值小于鏈表2的節點值。

pMergedHead的值就為鏈表2的節點值。

pMergedHead的下一個節點值就為鏈表1的下一個節點和鏈表2的節點值比對后的值(遞歸)。

  • 否則

pMergedHead的值就為鏈表1的節點值。

pMergedHead的下一個節點值就為鏈表2的下一個節點和鏈表1的節點值比對后的值(遞歸)。

  • 最后,返回pMergedHead
export function MergeLinkedList(
firstListHead: ListNode | null,
secondListHead: ListNode | null
): ListNode | null {
// 基線條件
if (firstListHead == null) {
return secondListHead;
}
if (secondListHead == null) {
return firstListHead;
}
let pMergedHead: ListNode | null = null;
if (firstListHead.element < secondListHead.element) {
pMergedHead = firstListHead;
pMergedHead.next = MergeLinkedList(firstListHead.next, secondListHead);
} else {
pMergedHead = secondListHead;
pMergedHead.next = MergeLinkedList(firstListHead, secondListHead.next);
}
return pMergedHead;
}

測試用例

接下來,我們用思路分析章節中的例子來測試下我們的代碼能否正常執行。

const firstLinkedList = new LinkedList();
firstLinkedList.push(1);
firstLinkedList.push(3);
firstLinkedList.push(5);
firstLinkedList.push(7);
firstLinkedList.push(9);
const secondLinkedList = new LinkedList();
secondLinkedList.push(2);
secondLinkedList.push(4);
secondLinkedList.push(6);
secondLinkedList.push(8);

const resultListHead = MergeLinkedList(
firstLinkedList.getHead(),
secondLinkedList.getHead()
);

console.log(resultListHead);

圖片

示例代碼

本文所列舉的代碼,其完整版請移步:

  • MergeLinkedList.ts
  • MergeLinkedList-test.ts
責任編輯:武曉燕 來源: 神奇的程序員
相關推薦

2021-12-06 09:43:01

鏈表節點函數

2020-10-15 06:56:51

MySQL排序

2022-10-09 08:35:06

SQL自定義排序

2020-09-08 06:54:29

Java Gradle語言

2023-07-06 13:56:14

微軟Skype

2022-08-25 10:37:00

CIOIT領導者

2018-04-27 09:22:21

數據存儲技巧

2022-10-19 15:20:58

pandas數據處理庫技巧

2018-06-07 13:17:12

契約測試單元測試API測試

2023-09-22 17:36:37

2021-01-28 22:31:33

分組密碼算法

2020-05-22 08:16:07

PONGPONXG-PON

2021-08-03 08:13:47

數據

2022-01-11 15:44:15

JavaScript圖表庫數據

2020-09-15 12:45:48

系統LinuxUnix

2021-07-16 11:48:26

模型 .NET微軟

2023-09-20 23:01:03

Twitter算法

2021-03-01 18:37:15

MySQL存儲數據

2021-08-01 09:55:57

Netty時間輪中間件

2023-09-27 16:39:38

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国内自拍偷拍 | 亚洲欧美激情视频 | 秋霞a级毛片在线看 | 亚洲一二三区免费 | 国产欧美在线 | 日韩最新网站 | 免费视频中文字幕 | 国产精品av久久久久久久久久 | 国产一区二区精品在线观看 | 亚洲精品自在在线观看 | 国产综合视频 | 久久高清| 色综合视频在线 | 日韩精品一区二区三区中文在线 | 亚洲精品久久 | 国产a爽一区二区久久久 | 日韩久久精品电影 | 少妇久久久久 | 午夜男人天堂 | 91视视频在线观看入口直接观看 | 成人精品鲁一区一区二区 | 91.色 | 久久久蜜桃一区二区人 | 欧美精品日韩 | 在线观看成人精品 | 色吊丝2288sds中文字幕 | 激情av在线 | 男人av的天堂 | 九九综合九九 | 国产欧美一级二级三级在线视频 | 欧美日韩国产高清视频 | 欧美激情视频一区二区三区在线播放 | 91精品国模一区二区三区 | 国产aⅴ爽av久久久久久久 | 中文字幕精品一区二区三区精品 | 日韩av一区二区在线观看 | 国产精品亚洲精品 | 欧美日一区二区 | 99精品欧美一区二区三区综合在线 | 亚洲国产69 | 成人午夜免费在线视频 |