栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

day2--链表

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

day2--链表

1.链表是什么?

一组不必相连的内存结构,按特定顺序链接在一起的抽象数据类型
1.不必相连
2.节点

2.链表种类

单向链表:内存结构由数据域next指针域组成(单向遍历)
双向链表:通过指针Next 和指针 Prev 链接在一起组成
循环链表:每一个内存结构都有前驱后继

3.链表算法
//数组转链表
    function createlinkedList(arr) {
      let linkNode = [];
      function Node(val) {
        this.val = val;
        this.next = null;
      }
      for (let i = 0; i < arr.length; i++) {
        let node = new Node(arr[i]);
        linkNode.push(node);
      }
      for (let i = 0; i < linkNode.length - 1; i++) {
        linkNode[i].next = linkNode[i + 1];
      }
      let linkList = {};
      linkList.head = linkNode[0];
      return linkList;
    }
//链表倒数第k个节点
	var getKthFromEnd = function (head, k) {
      let current = head;
      let count = 0;
      while (current) {
        current = current.next;
        count++;
      }
      current = head;
      for (let i = 0; i < count - k; i++) {
        current = current.next
      }
      return current
    };
//求离终点距离为 k 的节点
    function findNode(list, k) {
      let len = 0;
      let current = list.head;
      while (current) {
        current = current.next;
        len++;
      }
      return len - k;
    }
//翻转链表
    function reverseList(list) {
      let current = list.head
      let prev = null
      while (current) {
        let next = current.next;
        current.next = prev
        prev = current
        current = next;
      }
      return prev;
    }
//判断是否是回文链表
    function isPalindrome(head) {
      let current = head;
      let ans = []
      while (current) {
        ans.push(current.val);
        current = current.next;
      }
      let len = ans.length;
      let len1 = Math.floor(ans.length / 2);
      for (let i = 0; i < len1; i++) {
        if (ans[i] != ans[len - 1 - i]) {
          return false;
        }
      }
      return true;
    }
//从尾到头打印链表
    function printListFromTailToHead(list) {
      let ans = [];
      let current = list;
      while (current) {
        ans.push(list.val);
        current = current.next;
      }
      return ans.reverse();
    }
//合并两个有序链表
    function mergeTwoLists(l1, l2) {
      if (l1 === null) return l2;
      if (l2 === null) return l1;
      if (l1.val > l2.val) {
        l1.next = mergeTwoLists(l1.next, l2);
        return l1;
      } else {
        l2.next = mergeTwoLists(l1, l2.next);
        return l2;
      }
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/293202.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号