LeetCode題解之反轉(zhuǎn)鏈表

反轉(zhuǎn)鏈表

題目描述

定義一個函數(shù),輸入一個鏈表的頭節(jié)點,反轉(zhuǎn)該鏈表并輸出反轉(zhuǎn)后鏈表的頭節(jié)點。

示例:

輸入: 1->2->3->4->5->NULL
輸出: 5->4->3->2->1->NULL

限制:

  • 0 <= 節(jié)點個數(shù) <= 5000

解題思路

使用雙指針法,定義兩個指針 pre 和 cur,pre 在前,cur 在后,每次讓 cur 的 next 指向 pre ,pre 指向 cur ,完成一次局部反轉(zhuǎn),注意在每次反轉(zhuǎn)之前需要記錄 cur 的 next,以便于下一次反轉(zhuǎn),每次完成反轉(zhuǎn)之后,pre 和 cur 同時向前移動,直到 pre 到達鏈表的尾部,即為完成了整個鏈表的反轉(zhuǎn)。

復雜度分析

  • 時間復雜度:O(n),其中 n 為鏈表中節(jié)點的個數(shù)。
  • 空間復雜度:O(1)。

代碼實現(xiàn)

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode pre = null;
        ListNode cur = head;
        ListNode next = null;
        while (cur != null) {
            next = cur.next;
            cur.next = pre;
            pre = cur;
            cur = next;
        }
        return pre;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容