反轉(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;
}
}