1. 程式人生 > >連結串列反轉方法詳解(含實現程式碼)

連結串列反轉方法詳解(含實現程式碼)

怎麼反轉連結串列呢?這個是面試中經常出現的一道題。一般在資料結構或者演算法的面試題中,儘量不使用額外的空間去實現,儘管現在的計算機空間很充足,但是面試考察的還是對於整體效能的考慮。

方法其實有很多,我們可以依次遍歷連結串列,然後依次使用頭插入的方法來達到目的。

其中有個簡單的方法,就是把連結串列的每個指標反轉。

下面就是通過反轉指標來實現反轉連結串列的程式碼。
public void reverse(){
    Node temp = first;
    last = temp;
    Node next = first.getNext();
    for(int i =0; i<size- 1;i++){
        Node nextNext = next.getNext();
        next.setNext(temp);
        temp = next;
        next = nextNext;
    }
    last.setNext(null);
    first = temp;
}
這部分程式碼應該在 Link 類裡,通過反轉指標實現連結串列反轉。

接下來我們看看測試程式碼。
package me.irfen.algorithm.ch02.extend;
import me.irfen.algorithm.ch02.Link;
public class LinkReverseTest {
    public static void main(String[] args) {
        Link link = new Link();
        link.addLast(1);
        link.addLast(2);
        link.addLast(3);
        link.addLast(4);
        printAllElements(link);
        link.reverse();
        printAllElements(link);
    }
    private static void printAllElements(Link link) {
        for (int i = 0; i < link.size(); i++) {
            System.out.println(link.get(i).getData());
        }
    }
}
這樣可以輕鬆地完成連結串列反轉。