题解一:
迭代:逐步修改节点指针,注意在修改前要保存下一个节点指针。
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;
}
}