1. 程式人生 > >劍指offer--面試題16:翻轉連結串列--Java實現

劍指offer--面試題16:翻轉連結串列--Java實現

題目描述:
定義一個函式,輸入一個連結串列的頭結點,反轉該連結串列並輸出反轉後連結串列的頭結點。

解題思路:
為了反轉列表,其實就是為了改變next指標,由指向後一個變為指向前一個。
這裡為了避免連結串列斷裂,要儲存三個結點,即當前結點,前一個結點和後一個結點。

程式碼:


public class ReverseListTest {

    static class ListNode {
        int key;
        ListNode next;


    }

    public static ListNode reverse(ListNode pHead) {
        ListNode reverseHead = pHead;
        ListNode node = pHead;
        ListNode prevNode = null
; while (node != null) { ListNode next = node.next; if (next == null) { reverseHead = node; } node.next = prevNode; prevNode = node; node = next; } return reverseHead; } public
static void main(String[] args) { // 建立一個測試連結串列 ListNode head = new ListNode(); head.key = 0; ListNode p = head; for (int i = 1; i < 10; i++) { ListNode node = new ListNode(); node.key = i; node.next = null; p.next = node; p = node; } ListNode pNode = reverse(head); while
(pNode != null){ System.out.println(pNode.key); pNode = pNode.next; } } }