方法一:迭代
这是是一种比较普通的算法,但我自己也没想到这种
class Solution {
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode curr = head;
while (curr != null) {
ListNode next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
return prev;
}
}
方法二:递归
本来这道题,自己打算用递归来做的,想了半天也没有想通,然后看了下官方的解释…直接看晕,但多看看就理解了
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;
}
}
它这里递归的作用就是,帮最后一个给你,然后最后一个的下一个指向前一个 head.next.next = head;(就调过来了),由于第一个一定是有个null的所有就用了这句head.next = null;