演算法學習100天——12 反轉連結串列
阿新 • • 發佈:2022-03-11
題目地址(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%的使用者