回覆列表
  • 1 # esohp13030

    問題:給一個單向連結串列,把它從頭到尾反轉過來。比如: a - b - c -d 反過來就是 d - c - b - a 。分析:假設每一個node的結構是:複製程式碼程式碼如下:class Node {char value;Node next;}因為在對連結串列進行反轉的時候,需要更新每一個node的“next”值,但是,在更新 next 的值前,我們需要儲存 next 的值,否則我們無法繼續。所以,我們需要兩個指標分別指向前一個節點和後一個節點,每次做完當前節點“next”值更新後,把兩個節點往下移,直到到達最後節點。程式碼如下:複製程式碼程式碼如下:public Node reverse(Node current) {//initializationNode previousNode = null;Node nextNode = null;while (current != null) {//save the next nodenextNode = current.next;//update the value of "next"current.next = previousNode;//shift the pointerspreviousNode = current;current = nextNode;}return previousNode;}上面程式碼使用的是非遞迴方式,這個問題也可以透過遞迴的方式解決。程式碼如下:複製程式碼程式碼如下:public Node reverse(Node current){if (current == null || current.next == null) return current;Node nextNode = current.next;current.next = null;Node reverseRest = reverse(nextNode);return reverseRest;}遞迴的方法其實是非常巧的,它利用遞迴走到連結串列的末端,然後再更新每一個node的next 值 (程式碼倒數第二句)。

  • 中秋節和大豐收的關聯?
  • 李白在《月下獨酌》中對月亮寄寓了怎樣的情感?