1. 程式人生 > 其它 >演算法學習100天——12 反轉連結串列

演算法學習100天——12 反轉連結串列

題目地址(2. 兩數相加)

https://leetcode-cn.com/problems/add-two-numbers/

題目描述

描述
給定一個單鏈表的頭結點pHead(該頭節點是有值的,比如在下圖,它的val是1),長度為n,反轉該連結串列後,返回新連結串列的表頭。

資料範圍: 0\leq n\leq10000≤n≤1000
要求:空間複雜度 O(1)O(1) ,時間複雜度 O(n)O(n) 。

如當輸入連結串列{1,2,3}時,
經反轉後,原連結串列變為{3,2,1},所以對應的輸出為{3,2,1}。
以上轉換過程如下圖所示:

思路

這道題確實不難,很簡單,拿到題,看到連結串列,一般都是操作的指向問題,

所以直接兩個變數,兩兩反轉就ok了

程式碼

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode pre = null;
        ListNode next = null;
        while(head != null){
            next = head.next;
            head.next = pre;
            pre = head;
            head = next;
        }
        return pre;
    }
}

結果

執行用時:0 ms, 在所有 Java 提交中擊敗了100.00%的使用者

記憶體消耗:40.9 MB, 在所有 Java 提交中擊敗了42.71%的使用者