非递归实现(java)
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head == null){
return head;
}
ListNode before = null;
ListNode cur = head;
ListNode memo = head.next;
while(cur != null){
memo = cur.next;
cur.next = before;
before = cur;
cur = memo;
}
return before;
}
}
递归实现(java)
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head == null){
return null;
}
ListNode pre = null;
ListNode cur = head;
return reverse(pre, cur);
}
private ListNode reverse(ListNode pre, ListNode cur){
if(cur == null){
return pre;
}
ListNode memo = cur.next;
cur.next = pre;
pre = cur;
cur = memo;
return reverse(pre, cur);
}
}
头插法
public ListNode ReverseList(ListNode head) {
ListNode memo = new ListNode(-1);
ListNode node = head;
while (node != null) {
ListNode newNode = new ListNode(node.val);
newNode.next = memo.next;
memo.next = newNode;
node = node.next;
}
return memo.next;
}