輸入爲鏈表的表頭
輸出爲須要打印的「新鏈表」的表頭
/**
* 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<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> result=
new
ArrayList();
if
(listNode==
null
)
return
result;
Stack<ListNode> stack=
new
Stack();
stack.push(listNode);
while
(listNode.next!=
null
)
{
stack.push(listNode.next);
listNode=listNode.next;
}
while
(!stack.isEmpty())
{
ListNode node=stack.pop();
result.add(node.val);
}
return
result;
}
}
這要弄清了,Java對象引用的關係理解起來就很容易了.下面就是實現的整個代碼:html
打印的結果爲:java
繼續擴展下添加查找對應鍵值和按對應鍵值刪除鏈結點的find和delete方法.
find方法:
這個方法與上面的displayLink方法相似.將current定義爲first,經過不斷的current.next.iData與鍵值做比較,若是相等便返回當前引用.
若是一直到最後Null也沒找到就返回Null
delete方法:
這個方法須要兩個變量.current:當前鏈結點的引用 privious:前一鏈結點的引用.這個方法也是經過循環查找若是找到了
.就用前一引用的next指向當前的next的引用就能夠了.見圖
最後代碼:node
執行結果:數組