1.题目
给你单链表的头节点 head
,请你反转链表,并返回反转后链表的头节点。
2.题解
方法一:遍历
var reverseList = function (head) {
//定义前节点pre
let pre = null;
//定义当前节点cur
let cur = head;
//遍历
while (cur) {
//先保存后节点
let next = cur.next;
//反转
cur.next = pre;
//把pre设置成cur
pre = cur;
//把cur设置成next
cur = next;
}
//返回反转后链表的头节点
return pre;
};
方法二:递归
var reverseList = function (head) {
//递归终止条件
if (head == null || head.next == null) {
return head;
}
//开始递归并保存newHead
let newHead = reverseList(head.next);
//反转
head.next.next = head;
//反转后让head.next指向空,不然链表会产生环
head.next = null;
//每次返回的都是初始链表递归到达的最后一个节点
return newHead;
};
递归的图解: