1.题目
2.题解
2.1 递归法
相当于解决如下问题:
假设链表的其余部分已经被反转,我们该如何反转它前面的部分?
因此,有两个要点:
1. k.next.next = k
2. 1.next = null
- Python
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if not head or not head.next:
return head
# 递归法
nextNode = self.reverseList(head.next)
head.next.next = head
head.next = None
return nextNode
- Java
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) return head;
// 递归法
ListNode p = reverseList(head.next);
head.next.next = head;
head.next = null;
return p;
}
}
- Time: O(n);n为链表长度
- Space: O(n);使用递归,将会使用隐式栈空间
2.2 迭代法
- Python3
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if not head or not head.next:
return head
reverse = None
curr = head
while curr:
temp = curr.next
curr.next = reverse
reverse = curr
curr = temp
return reverse
- Java
/**
* 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 reverse = null;
ListNode curr = head;
while(curr!=null){
ListNode temp = curr.next;
curr.next = reverse;
reverse = curr;
curr = temp;
}
return reverse;
}
}
- Time: O(n),n为列表长度
- Space: O(1)