溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java怎么實現反轉鏈表

發布時間:2021-12-20 15:03:45 來源:億速云 閱讀:190 作者:iii 欄目:大數據
# Java怎么實現反轉鏈表

反轉鏈表是數據結構與算法中的經典問題,也是面試高頻考點。本文將介紹Java中兩種常見的反轉鏈表實現方法:**迭代法**和**遞歸法**,并提供完整代碼示例。

## 一、鏈表節點定義
首先定義鏈表節點類:
```java
class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}

二、迭代法實現

時間復雜度O(n),空間復雜度O(1)

public ListNode reverseList(ListNode head) {
    ListNode prev = null;
    ListNode curr = head;
    while (curr != null) {
        ListNode nextTemp = curr.next; // 臨時保存下一個節點
        curr.next = prev;  // 反轉指針方向
        prev = curr;       // prev指針后移
        curr = nextTemp;   // curr指針后移
    }
    return prev;  // 新鏈表頭節點
}

三、遞歸法實現

時間復雜度O(n),空間復雜度O(n)(??臻g)

public ListNode reverseList(ListNode head) {
    if (head == null || head.next == null) {
        return head;
    }
    ListNode newHead = reverseList(head.next);
    head.next.next = head;  // 反轉指針方向
    head.next = null;       // 斷開原指針
    return newHead;
}

四、方法對比

方法 優點 缺點
迭代法 空間效率高 代碼邏輯相對復雜
遞歸法 代碼簡潔直觀 棧溢出風險(長鏈表)

五、測試示例

// 輸入: 1->2->3->4->5->NULL
// 輸出: 5->4->3->2->1->NULL
ListNode head = new ListNode(1);
head.next = new ListNode(2);
// ...構建鏈表
ListNode reversed = reverseList(head);

掌握這兩種實現方式可以幫助開發者深入理解鏈表結構和指針操作,建議同時掌握兩種寫法以應對不同場景需求。 “`

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女