206. 反转链表 - 力扣(LeetCode) (leetcode-cn.com)
一开始想到的是用栈反转,会占用额外空间,后来看了别人的代码,一个new都没有,直接就地反转。
方法一
class Solution {
public ListNode reverseList(ListNode head) {
if(head==null)
return head;
Stack<Integer> stack = new Stack<Integer>();
while (head != null) {
stack.push(new Integer(head.val));
head = head.next;
}
ListNode h = new ListNode(stack.pop());
ListNode now = h;
while (!stack.empty()){
ListNode node = new ListNode(stack.pop());
now.next = node;
now = node;
}
return h;
}
}
方法二
class Solution {
public ListNode reverseList(ListNode head) {
ListNode pre = null;
ListNode node = head;
ListNode next = null;
while (node!=null){
next = node.next;
node.next=pre;
pre = node;
node = next;
}
return pre;
}
}
leetcode这内存消耗有问题吧,这俩居然一样,哈哈哈哈。