题目:
/**要求输入头节点,但是给了一个数组,返回一个ListNode节点
* @param {ListNode} head
* @return {ListNode}
*/
var reverseList = function(){}
步骤:
1. 将输入的数组转换成链表
var arrayToLinkedList = function (arr) {
//1.
let head = new ListNode(arr[0]);
//cur是旧链表的最后一个节点(类似头插法)
let cur = head;
for (let i = 1; i < arr.length; i++) {
cur.next = new ListNode(arr[i]);
cur = cur.next;
}
//链表的头节点但相当于返回整个链表
return head;
};
解析:
-
- 实例化ListNode()生成头节点
-
- cur就是旧链表的尾节点
-
- 类似头插法,遍历数组后面的数,每一个都转成一个节点,cur.next指向新节点
2. 反转
var reverseList = function (head) {
//注意pre为什么初始化null,因为第一个节点反向需要指向null
let pre = null;
let cur = head;
//注意零界点,cur是最后一个元素时最后依次反向,下一个是null,不进行反向,所以while截止
while (cur) {
//顺序讲解
let temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
return pre;
};
图解:
进阶:可以使用递归代码量更少
待补充