
方法一:迭代
这是是一种比较普通的算法,但我自己也没想到这种
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;
本文详细介绍了两种链表反转的方法:迭代法与递归法。迭代法通过不断更新当前节点的指向来完成反转过程;递归法则从链表尾部开始逐步调整节点指向,直至整个链表被反转。

149

被折叠的 条评论
为什么被折叠?



