每日一道算法题: leetcode 反转链表

143 阅读1分钟

反转链表,是一次笔试题,连链表都不懂是啥,怎么写呢,头痛又➕1。。。

1. 给定单链表的头节点 head ,请反转链表,并返回反转后的链表的头节点。

剑指 Offer II 024. 反转链表

输入: head = [1,2,3,4,5]
输出: [5,4,3,2,1]
var reverseList = function(head) {
    if(head==null) {
        return null
    }
    // 当前节点
    var current = head
    // 当前节点的前一个指针
    var pre = null
    while(current){
        let next = current.next
        current.next = pre
        pre = current
        current = next
    }
    return pre
};

01.链表

  • 单向链表:

1631021307233.jpg

  1. 节点组成 = 数据本身 + 指向下一节点指针
  2. 用一组任意“内存空间”(连续的或不连续的)存储数据元素
  3. 操作: 创建节点, 删除节点, 插入节点, 搜索/遍历节点
  • 双向链表:

1631021774155.jpg

  1. 节点组成 = 数据本身 + 指向下一节点指针 + 指向上一节点指针
  2. 用一组任意“内存空间”(连续的或不连续的)存储数据元素
  3. 操作: 创建节点, 删除节点, 插入节点, 搜索/遍历节点