剑指offerpython_《剑指offer》3. 从尾到头打印单链表值【Java+Python】
從尾到頭打印單鏈表值
1. 題目描述
輸入一個鏈表,按鏈表從尾到頭的順序返回一個ArrayList。
2. 示例
無
3. 解題思路
此題比較簡單
第一種方法:使用數組。先從頭到尾讀取鏈表數據,保存到一個數組a中。由于要獲取從尾到頭數據,新開一個數組b,從數組a尾部到頭部開始讀取,保存到數組b中。
第二種方法:使用棧。先從頭到尾讀取鏈表數據,保存到一個棧a中。利用棧先進后出的性質,pop到數組a中。
4. Java實現方法一:使用數組/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
public class Solution {
public ArrayList printListFromTailToHead(ListNode listNode) {
ArrayList res = new ArrayList();
if (listNode == null){
return res;
}
while(listNode != null){
res.add(listNode.val);
listNode = listNode.next;
}
ArrayList ress = new ArrayList();
for(int i = res.size()-1; i >= 0; i--){
ress.add(res.get(i));
}
return ress;
}
}方法二:使用棧/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
import java.util.Stack;
public class Solution {
public ArrayList printListFromTailToHead(ListNode listNode) {
// 使用棧結構實現
ArrayList res = new ArrayList();
if (listNode == null){
return res;
}
Stack stack = new Stack();
while (listNode != null){
stack.push(listNode.val);
listNode = listNode.next;
}
while (!stack.isEmpty()){
res.add(stack.pop());
}
return res;
}
}
5. Python實現第一種方法使用棧
第二種直接數組頭插法,代碼簡潔,但是復雜度較高#?從尾到頭依次打印單鏈表的值# 從尾到頭依次打印單鏈表的值
class ListNode:
def __init__(self, x=None):
self.val = x
self.next = None
class Solution:
def printListFromTailToHead(self, listNode):
if not listNode: #如果頭部結點為空
return
stack = []
while listNode:
stack.append(listNode.val)
listNode = listNode.next
while stack:
print(stack.pop())
# return sorted(stack, reverse=True)
def printListFromTailToHead2(self, listNode):
if not listNode:
return
li = []
while listNode:
li.insert(0, listNode.val)
listNode = listNode.next
return li
node1 = ListNode(10)
node2 = ListNode(11)
node3 = ListNode(13)
node1.next = node2
node2.next = node3
singleNode = ListNode(12)
test = ListNode()
S = Solution()
print(S.printListFromTailToHead2(node1))
print(S.printListFromTailToHead2(test))
print(S.printListFromTailToHead2(singleNode))如果您覺得本文有用,請點個“在看”
總結
以上是生活随笔為你收集整理的剑指offerpython_《剑指offer》3. 从尾到头打印单链表值【Java+Python】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: thymeleaf 中文_springb
- 下一篇: aspx网页背景图片设置代码_pytho