題目:從尾到頭列印鍊錶題解1:遞迴法要求:輸入乙個鍊錶的頭節點,從尾到頭反過來返回每個節點的值(用陣列返回)。
示例:輸入:head = [1,3,2]
輸出:[2,3,1]
限制:0 <= 鍊錶長度 <= 10000
因為是從尾到頭返回每乙個節點的值,所以很容易想到如果從最後的節點將值放入陣列中,然後再往前逐步將資料放入陣列,最後回到頭節點返回即可,可以想到遞迴就能輕鬆做到,只要注意遞迴函式的結束條件即可。
/**
* definition for singly-linked list.
* type listnode struct
*/func reverseprint(head *listnode) int
} if head.next != nil
return int
}
自然而然,效率不會很高~
反思了一下,其實遞迴還可以再簡短一點
/**
* definition for singly-linked list.
* type listnode struct
*/func reverseprint(head *listnode) int }}
結果如下:
題解2:反轉鍊錶
想了一下,這樣不行啊,耗時這麼長,試試不用遞迴吧~
然後就想,如果我反轉鍊錶呢,再生成陣列返回,這樣也可以實現吧?
/**
* definition for singly-linked list.
* type listnode struct
*/func reverseprint(head *listnode) int
var newhead *listnode
res := int{}
for head != nil
for newhead != nil
return res
}
結果如下:
解法3:反轉陣列
反轉鍊錶再獲取數值,可以是可以,會不會有點多餘?還不如直接順序獲取值放到陣列,再反轉結果呢~
/**
* definition for singly-linked list.
* type listnode struct
*/func reverseprint(head *listnode) int
res := int{}
for head != nil
for i, j := 0, len(res)-1; i < j;
return res
}
至此,結果有了很大的提公升:
解法4:棧
這個反轉陣列還是感覺好奇怪,有沒有更好的方法呢?把先讀到的放最後,最後的在最前面,棧不就是這樣的資料結構嗎?
/**
* definition for singly-linked list.
* type listnode struct
*/import "container/list"
func reverseprint(head *listnode) int
res := list.new()
for head != nil
ret := int{}
for e := res.front(); e != nil; e = e.next()
return ret
}
三下五除二,搞定!來看看成果:
解法5:遍歷兩次
其實到棧,我以為這題就這樣了,然而......
/**
* definition for singly-linked list.
* type listnode struct
*/func reverseprint(head *listnode) int
count := 0
newhead := head
for head != nil
res := make(int, count)
i := 0
for newhead != nil
return res
}
臥槽!!!質的提公升,既省去自動擴容的效能,也能提高處理速度: 面試 從尾到頭列印鍊錶
一 描述 輸入乙個單鏈表的頭結點,從尾到頭反過來列印出每個結點的值。鍊錶結點定義如下 class listnode 二 解題思路 此題有兩種解題思路,一種是利用遞迴的方法列印,另外一種是在從頭到尾遍歷的過程中將結點的值儲存至棧中,利用棧先進後出的特性,之後再依次列印棧中的結點元素即可。三 根據如上的...
面試 從尾到頭列印鍊錶
一 描述 輸入乙個單鏈表的頭結點,從尾到頭反過來列印出每個結點的值。鍊錶結點定義如下 class listnode 二 解題思路 此題有兩種解題思路,一種是利用遞迴的方法列印,另外一種是在從頭到尾遍歷的過程中將結點的值儲存至棧中,利用棧先進後出的特性,之後再依次列印棧中的結點元素即可。三 根據如上的...
從尾到頭列印鍊錶
題目描述 輸入乙個鍊錶,從尾到頭列印鍊錶每個節點的值。輸入 每個輸入檔案僅包含一組測試樣例。每一組測試案例包含多行,每行乙個大於0的整數,代表乙個鍊錶的節點。第一行是鍊錶第乙個節點的值,依次類推。當輸入到 1時代表鍊錶輸入完畢。1本身不屬於鍊錶。輸出 對應每個測試案例,以從尾到頭的順序輸出鍊錶每個節...