题来自leetcode《剑指offer》
题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
摘要:我们js是没有链表这种数据结构的,需要自己封装。简单说一下,链表以节点为单位,每个元素都是一个独立对象,在内存空间的存储是非连续的。链表的节点对象具有两个成员变量:「值 val」,「后继节点引用 next」 。链表属性有head、length,一个指向头节点,一个表示链表节点的个数;
这是题目给的节点类:
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
这到题最好画个图辅助理解;
核心还是next,要反转就得让当前节点指向前一个节点:
current.next = previous; //核心
那么我们就需要两个参数:
- current,保存当前节点
- previous,保存前一个节点
完整代码:
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var reverseList = function (head) {
if (!head) return head;
let current = head;
let previous = null;
while (current) {
let originalNext = current.next;
current.next = previous; //核心
previous = current;
current = originalNext;
}
return previous;
};