跳到主要内容

Reverse Linked List

描述

Reverse a singly linked list.

分析

用双指针 p, q,不断前进。

解法 1 迭代

// Reverse Linked List
// Time Complexity: O(n), Space Complexity: O(1)
class Solution {
public ListNode reverseList(ListNode head) {
ListNode p = null;
ListNode q = head;
while (q != null) {
ListNode tmp = q.next;
q.next = p;
p = q;
q = tmp;
}
return p;
}
}

解法 2 递归

// Reverse Linked List
// Time Complexity: O(n), Space Complexity: O(n)
public class Solution {
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) return head;
ListNode newHead = reverseList(head.next);
head.next.next = head;
head.next = null;
return newHead;
}
}