可以用堆栈法和双指针法
一个写的很丑的堆栈法。
class Solution {
public ListNode reverseList(ListNode head) {
if(head == null)
return null;
ListNode node = head;
Stack<ListNode> stack = new Stack();
// 将节点全部压入栈中
while(node != null){
stack.push(node);
node = node.next;
}
ListNode rear = stack.peek();
while(!stack.isEmpty()){
ListNode temp = stack.pop();
temp.next = stack.empty() ? null : stack.peek();
}
return rear;
}
}
算法复杂度
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( n ) O(n) O(n)
再用干净的双指针法
class Solution {
public ListNode reverseList(ListNode head) {
if(head == null)
return null;
ListNode pre = head;
ListNode cur = head.next;
head.next = null;
while(cur != null){
ListNode next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
return pre;
}
}
算法复杂度
- 时间复杂度: O ( n ) O(n) O(n)
- 空间复杂度: O ( 1 ) O(1) O(1)