206. 反转链表



方法一:迭代
var reverseList = function(head) {
let prev = null;
let curr = head;
while (curr) {
const next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
return prev;
};
方法二:递归
var reverseList = function(head) {
if (head == null || head.next == null) {
return head;
}
const newHead = reverseList(head.next);
head.next.next = head;
head.next = null;
return newHead;
};
方法三:虚拟头结点
var reverseList = function(head) {
let dumpyHead = new ListNode(-1);
dumpyHead.next = null;
let cur = head;
while (cur != null) {
let temp = cur.next;
cur.next = dumpyHead.next;
dumpyHead.next = cur;
cur = temp;
}
return dumpyHead.next;
};
方法四:使用栈来解决反转链表的问题
class Stack {
constructor () {
this.items = [];
}
push(element) {
this.items.push(element);
}
pop() {
return this.items.pop();
}
isEmpty() {
return this.items.length === 0;
}
}
var reverseList = function(head) {
if (head == null) return null;
if (head.next = null) return head;
let stack = new Stack();
let cur = head;
while (cur != null) {
stack.push(cur);
cur = cur.next;
}
let pHead = new ListNode(0);
cur = pHead;
while (!stack.isEmpty()) {
let node = stack.pop();
cur.next = node;
cur = cur.next;
}
cur.next = null;
return pHead.next;
};