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

實現鏈表反轉,你學會了嗎?

開發 前端
經過數據結構基礎的學習,我們知道鏈表中每個節點都會有一個指針,用于指向它的下一個節點,那么,我們只需要從鏈表頭部開始遍歷,逐一修改它的指針指向至其上一個節點,即可完成鏈表的反轉。

前言

有一個鏈表,如何將其反轉并獲取反轉后的鏈表頭節點?本文將分享一種解決方案,歡迎各位感興趣的開發者閱讀本文。

思路分析

經過數據結構基礎的學習,我們知道鏈表中每個節點都會有一個指針,用于指向它的下一個節點,那么,我們只需要從鏈表頭部開始遍歷,逐一修改它的指針指向至其上一個節點,即可完成鏈表的反轉。

這個思路的難點在于如何調整指針的指向,我們可以借助3個指針來完成這個操作,如下所示:

  • p1、p3分別是p2指針的上、下一個節點(默認指向null)
  • 如果p2指針指向的節點不為null

獲取p2指針指向的下一個節點,將其保存至p3

如果p3的值為null,則表示鏈表已經反轉完畢,用一個變量存儲p2的值

修改p2指針的指向至p1,修改p1的值為p2,修改p2的值為p3

圖片

實現代碼

通過上面的分析,我們分析出了可以用三指針來解決問題的思路,接下來,我們來看下代碼實現。

首先,設計一個名為ReverseLinkedList的類:

  • 內部有2個私有變量。

pPrev p1指針

pNode p2指針

  • 構造方法接受1個參數:鏈表頭節點。

對參數進行校驗。

初始化p2指針指向為鏈表頭節點,p1指針的指向為null。

export class ReverseLinkedList {
// p1指針
private pPrev: ListNode | null;
// p2指針
private pNode: ListNode | null;

constructor(listHead: ListNode) {
if (listHead == null) {
throw new Error("鏈表頭節點不能為空");
}
this.pNode = listHead;
this.pPrev = null;
}
}

上述代碼中,我們用了一個自定義類型ListNode,它描述了一個鏈表的節點應該包含哪些屬性,對此感興趣的開發者請移步我的另一篇文章:鏈表與變相鏈表的實現。

緊接著,實現鏈表反轉函數:

  • 聲明一個變量用于存儲反轉后的鏈表頭指針。
  • 移動p2指針,開始遍歷鏈表。

存儲p2指針的下一個節點至p3。

判斷p2指針是否為走到鏈表末尾,條件成立就修改存儲p2節點至反轉后的鏈表頭指針變量。

修改p2指針的指向至p1,修改p1的值為p2,修改p2的值為p3。

  • p2指針指向null,返回得到的鏈表頭節點。
  reverseList(): ListNode | null {
// 反轉后的鏈表頭指針
let pReversedHead: ListNode | null = null;
while (this.pNode != null) {
// p3指針
const pNext = this.pNode.next;
if (pNext == null) {
pReversedHead = this.pNode;
}
this.pNode.next = this.pPrev;
this.pPrev = this.pNode;
this.pNode = pNext;
}
return pReversedHead;
}

完整代碼請移步:ReverseLinkedList.ts

測試用例

接下來,我們將前言中的例子代入上個章節所實現的函數中,驗證下它能否得出正確的結果。

const linkedList = new LinkedList();
linkedList.push(1);
linkedList.push(3);
linkedList.push(8);
linkedList.push(9);
linkedList.push(12);
linkedList.push(18);
const reverseLinkedList = new ReverseLinkedList(linkedList.getHead());
const result = reverseLinkedList.reverseList();
console.log("反轉后的鏈表頭節點為", result);

運行結果如下所示,成功的解決了文章前言中所講的問題。

圖片

完整代碼請移步:reverseLinkedList-test.ts

示例代碼:

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

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

2023-08-01 12:51:18

WebGPT機器學習模型

2024-01-02 12:05:26

Java并發編程

2024-07-29 10:35:44

KubernetesCSI存儲

2024-01-19 08:25:38

死鎖Java通信

2024-02-04 00:00:00

Effect數據組件

2023-07-26 13:11:21

ChatGPT平臺工具

2023-01-10 08:43:15

定義DDD架構

2024-08-12 08:12:38

2023-12-07 12:29:49

Nginx負載均衡策略

2024-03-12 08:37:32

asyncawaitJavaScript

2024-03-06 08:28:16

設計模式Java

2022-12-06 07:53:33

MySQL索引B+樹

2023-01-31 08:02:18

2023-10-06 14:49:21

SentinelHystrixtimeout

2022-07-13 08:16:49

RocketMQRPC日志

2023-05-05 06:54:07

MySQL數據查詢

2023-06-26 13:08:52

GraphQL服務數據

2024-02-02 11:03:11

React數據Ref

2023-07-30 22:29:51

BDDMockitoAssert測試

2023-08-26 21:34:28

Spring源碼自定義
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费精品久久久久久中文字幕 | 亚洲精品久久国产高清情趣图文 | 国产色网站 | 久草视频观看 | 亚洲一区二区精品视频在线观看 | 亚洲一卡二卡 | 国产精品美女久久久久久久久久久 | 在线观看中文字幕 | 一区精品视频在线观看 | 韩日av片| 欧美国产精品一区二区三区 | 九九久久精品 | 欧美福利一区 | av高清毛片 | 欧美一区免费 | 亚洲一区精品在线 | 自拍视频网站 | 国产精品99久久久精品免费观看 | 精品人伦一区二区三区蜜桃网站 | 亚洲国产精品人人爽夜夜爽 | 亚洲久久久 | 亚洲国产一区视频 | 日日操夜夜操天天操 | 国产精品久久精品 | 91新视频 | www.亚洲成人网 | 一级做a| 91精品国产综合久久福利软件 | 人人玩人人添人人澡欧美 | 亚洲视频免费在线观看 | 先锋资源亚洲 | 亚洲欧洲在线视频 | 日本三级电影在线免费观看 | 波多野结衣一区二区三区在线观看 | 99在线资源 | 91精品国产综合久久久动漫日韩 | 超碰伊人 | 久久久久久一区 | 一区二区三区在线看 | 亚洲成人一区二区 | 一级一片在线观看 |