輸入乙個鍊錶的頭節點,從尾到頭反過來返回每個節點的值(用陣列返回)。示例 1:
輸入:head = [1,3,2]
輸出:[2,3,1]
限制:0 <= 鍊錶長度 <= 10000
/**
* definition for singly-linked list.
* public class listnode
* }*/class
solution
}
只有頭節點的普通鍊錶一般只能夠從頭至尾依次訪問每乙個節點,題目要求我們返回乙個從尾至頭的訪問順序。這種反向操作我們可以考慮:
由鍊錶的頭節點可以遍歷出整乙個鍊錶,在遍歷的過程中,我們可以將每乙個節點的值儲存起來,最後將得到的結果反向遍歷
public
int[
]reverseprint
(listnode head)
//待返回陣列,長度為集合元素個數
int[
] res =
newint
[list.
size()
];//遍歷集合
int cur = res.length -1;
for(integer val : list)
return res;
}
要求從尾到頭的輸出,然而鍊錶只能從頭到尾。可以利用棧的先進後出來實現。
public
int[
]reverseprint
(listnode head)
stack
stack =
newstack
();//記錄棧中元素個數
int size =0;
//遍歷鍊錶,將先遍歷到的val壓入棧中,最後才彈出來
while
(true
) head = head.next;
}int
res =
newint
[size]
;int cur =0;
while
(!stack.
isempty()
)return res;
}
先進後出的方式可以使用遞迴實現。
arraylist
list =
newarraylist
();public
int[
]reverseprint
(listnode head)
return res;
}//往集合中新增當前節點的值,並將下乙個節點進行同樣操作
private
void
funtion
(listnode head)
明確棧的特性:先進後出
若有類似這種反向操作的題目,可以優先考慮使用棧這個資料結構來解決。
劍指offer06 從尾到頭列印鍊錶
題目 從尾到頭列印鍊錶 思路 1,注意傳入函式的是指向煉表頭的指標,在函式中不應該直接使用這個指標,而是應該用乙個指標的臨時變數來遍歷鍊錶 2,方法一 使用棧來實現 3,方法二 遞迴在本質上就是乙個棧結構,所以也可以用遞迴來實現 solution include include include us...
劍指offer 06 從尾到頭列印鍊錶
輸入乙個鍊錶的頭節點,從尾到頭反過來返回每個節點的值 用陣列返回 示例 1 輸入 head 1,3,2 輸出 2,3,1 限制 0 鍊錶長度 10000 鍊錶特點 只能從前至後訪問每個節點。題目要求 倒序輸出節點值。這種先入後出的需求可以借助棧來實現。通過linkedlist類來實現棧 入棧 遍歷鍊...
劍指 Offer 06 從尾到頭列印鍊錶
題目描述 輸入乙個鍊錶的頭節點,從尾到頭反過來返回每個節點的值 用陣列返回 解題思路 1 在不允許修改鍊錶的結構的條件下,採用棧輔助 2 新建乙個棧,stackstack new stack 將鍊錶的節點依次壓入棧中 新開乙個陣列,int print new int size 用來儲存從棧中彈出的值...