题解一:
迭代:逐步修改节点指针,注意在修改前要保存下一个节点指针。
class Solution {public ListNode reverseList(ListNode head) {ListNode pre = null;while (head!= null) {ListNode temp = head.next;head.next = pre;pre = head;head = temp;}return pre;}
}
题解二:
递归:利用递归栈存储先出现节点的信息。具体做法是先判断head非空,再存储最后一个节点,也是就反转后的第一个节点,便于结果返回。随后递归调用head.next并返回head.next,实现(head.next)->head,最后再将第一个节点指向null,返回先前存储的最后一个节点。
class Solution {public ListNode F(ListNode head) {if (head.next != null)F(head.next).next = head;//递归return head;}public ListNode reverseList(ListNode head) {if (head == null) return null;ListNode result = head;while (result.next != null) result = result.next;F(head);//调用递归head.next = null;return result;}
}