摘要:題目描述輸入一個(gè)鏈表,按鏈表值從尾到頭的順序返回一個(gè)。最后別忘了,從尾到頭遍歷鏈表,不要忘了將你的結(jié)果進(jìn)行翻轉(zhuǎn)。
題目描述
輸入一個(gè)鏈表,按鏈表值從尾到頭的順序返回一個(gè)ArrayList。
分析要了解鏈表的數(shù)據(jù)結(jié)構(gòu):
val屬性存儲(chǔ)當(dāng)前的值,next屬性存儲(chǔ)下一個(gè)節(jié)點(diǎn)的引用。
要遍歷鏈表就是不斷找到當(dāng)前節(jié)點(diǎn)的next節(jié)點(diǎn),當(dāng)next節(jié)點(diǎn)是null時(shí),說(shuō)明是最后一個(gè)節(jié)點(diǎn),停止遍歷。
最后別忘了,從尾到頭遍歷鏈表,不要忘了將你的結(jié)果進(jìn)行翻轉(zhuǎn)。
代碼/*function ListNode(x){ this.val = x; this.next = null; }*/ function printListFromTailToHead(head) { const result = []; let temp = head; while(temp){ result.push(temp.val); temp = temp.next; } return result.reverse(); }拓展
鏈表定義:用一組任意存儲(chǔ)的單元來(lái)存儲(chǔ)線性表的數(shù)據(jù)元素。
一個(gè)對(duì)象存儲(chǔ)著本身的值和下一個(gè)元素的地址。
需要遍歷才能查詢到元素,查詢慢。
插入元素只需斷開連接重新賦值,插入快。
function LinkList(){ function node(element){ this.value = element; this.next = null; } let length = 0; let head = null; } LinkList.prototype = { // 追加 append:function(element){ var node = new node(element); var temp = this.head; if(this.head){ //遍歷找到鏈表的終點(diǎn) while(temp.next){ temp = temp.next; } temp.next = node; }else{ this.head = node; } this.length++; }, // 插入 insert:function(element,index){ if(index <= this.length && index>0){ var node = new node(element); var currentIndex = 0; var currentNode = this.head; var preNode = null; if (currentIndex === 0) { node.next = currentNode; this.head = node; return; } while(currentIndex鏈表翻轉(zhuǎn) 把初始鏈表頭當(dāng)做基準(zhǔn)點(diǎn)
移動(dòng)下一個(gè)元素到頭部
直到下一個(gè)元素為空
/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } */ /** * @param {ListNode} head * @return {ListNode} */ var reverseList = function (head) { let currentNode = null; let headNode = head; while (head && head.next) { // 將當(dāng)前節(jié)點(diǎn)從鏈表中取出 currentNode = head.next; head.next = currentNode.next; // 將取出的節(jié)點(diǎn)移動(dòng)到頭部 currentNode.next = headNode; headNode = currentNode; } return headNode; };
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/100877.html
摘要:導(dǎo)航小助手劍指從尾到頭打印鏈表題目詳情解題思路源代碼總結(jié)劍指從尾到頭打印鏈表題目詳情輸入一個(gè)鏈表的頭節(jié)點(diǎn),從尾到頭反過(guò)來(lái)返回每個(gè)節(jié)點(diǎn)的值用數(shù)組返回。時(shí)間復(fù)雜度方法先反轉(zhuǎn)鏈表并求長(zhǎng)度,在將反轉(zhuǎn)后的鏈表數(shù)據(jù)拷貝至數(shù)組中。 ...
摘要:題目輸入一個(gè)鏈表的頭節(jié)點(diǎn),從尾到頭反過(guò)來(lái)返回每個(gè)節(jié)點(diǎn)的值用數(shù)組返回。 題目輸入一個(gè)鏈表的頭節(jié)點(diǎn),從尾到頭反過(guò)來(lái)返回每個(gè)節(jié)點(diǎn)的值(用數(shù)組返回)。示例 1:輸入:head = [1,3,2]輸出:[2,3,1]限制:0
題目 輸入一個(gè)鏈表的頭節(jié)點(diǎn),從尾到頭反過(guò)來(lái)打印出每個(gè)節(jié)點(diǎn)的值。 解題思路 一、棧 第一個(gè)遍歷的節(jié)點(diǎn)最后一個(gè)輸出,而最后一個(gè)比遍歷到的節(jié)點(diǎn)第一個(gè)輸出(后進(jìn)先) public static ArrayList printListFromTailToHead(ListNode listNode){ ArrayList list = new ArrayList(); ...
摘要:面試題從尾到頭打印鏈表輸入一個(gè)鏈表,從尾到頭打印鏈表每個(gè)節(jié)點(diǎn)的值面試題重建二叉樹輸入某二叉樹的前序遍歷和中序遍歷的結(jié)果,請(qǐng)重建出該二叉樹。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹并返回。隊(duì)列中的元素為類型。其中負(fù)數(shù)用補(bǔ)碼表示。 面試題2 單例(之前有整理,略) 面試題3 二維數(shù)組中的查找 public boolean find(int target, int [][] arra...
摘要:一定要認(rèn)真看分析注釋題目要求題目描述輸入一個(gè)鏈表,從尾到頭打印鏈表每個(gè)節(jié)點(diǎn)的值。分析因?yàn)殒湵碇挥兄喇?dāng)前結(jié)點(diǎn)才能知道下一結(jié)點(diǎn),所以不可能直接從后往前打印。 一定要認(rèn)真看 分析 | 注釋 | 題目要求 Question 1 題目描述:輸入一個(gè)鏈表,從尾到頭打印鏈表每個(gè)節(jié)點(diǎn)的值。 分析:因?yàn)殒湵碇挥兄喇?dāng)前結(jié)點(diǎn)才能知道下一結(jié)點(diǎn),所以不可能直接從后往前打印。這種逆序的算法(策略)我們常用棧這...
閱讀 3939·2021-11-24 09:39
閱讀 3843·2021-11-22 12:07
閱讀 1184·2021-11-04 16:10
閱讀 923·2021-09-07 09:59
閱讀 1967·2019-08-30 15:55
閱讀 1009·2019-08-30 15:54
閱讀 796·2019-08-29 14:06
閱讀 2542·2019-08-27 10:54