美文网首页
单向链表

单向链表

作者: Ag_fronted | 来源:发表于2021-07-02 17:56 被阅读0次
function newNode(val) {
  this.val = val;
  this.next = null;
}

// 数组转链表
function singlyLinkedList(array) {
  this.head = null;
  let i = 0;
  let temp = null;
  while (i < array.length) {
    const node = new newNode(array[i]);
    if (i === 0) {
      this.head = node;
      temp = node;
    } else {
      temp.next = node;
      temp = temp.next;
    }
    i++;
  }
  return this;
}

// 链表翻转
function reverseLinkedList(singleTrack) {
  const newArr = [singleTrack.head.val];
  let temp = singleTrack.head;
  while (temp.next) {
    newArr.push(temp.next.val);
    temp = temp.next;
  }
  return new singlyLinkedList(newArr.reverse());
}

let singleTrack = new singlyLinkedList([1, 2, 3, 4]);
console.log(singleTrack);
console.log(reverseLinkedList(singleTrack));

// 链表第k个元素
function findIndex(singleTrack, k) {
  if (k === 1) {
    return singleTrack.head.val;
  } else {
    return eval(
      `singleTrack.head${new Array(k - 1).fill('?.next').join('')}?.val`
    );
  }
}

// 链表长度
function getTrackLength(singleTrack) {
  let temp = null,
    length = 0;
  if (singleTrack?.head?.val) {
    length = 1;
    temp = singleTrack.head;
  }
  while (temp?.next?.val) {
    temp = temp.next;
    length++;
  }
  return length;
}

// console.log(findIndex(singleTrack, 3));//第k个元素
// console.log(getTrackLength(singleTrack));//链表长度
console.log(findIndex(singleTrack, getTrackLength(singleTrack) + 1 - 5)); //倒数第k个元素

// 双指针:链表倒数第k个元素
function getLinkedListByLastIndex(linkedList, k) {
  let first = linkedList.head,
    second = linkedList.head;
  for (let i = 1; i <= k; i++) {
    first = first.next;
  }
  while (first) {
    first = first.next;
    second = second.next;
  }
  return second;
}
console.log(getLinkedListByLastIndex(singleTrack, 2)); 

// 链表翻转
var reverseLinkedList = function (head) {
  var prev = null,
    curr = head;
  while (curr) {
    const next = curr.next;
    curr.next = prev;
    prev = curr;
    curr = next;
  }
  return prev;
};

console.log(reverseLinkedList(singleTrack.head));

相关文章

  • 8.单向链表SingleLinkList

    目录:1.单向链表的定义2.单向链表的图解3.单向链表定义操作4.单向链表的实现 1.单向链表的定义 2.单向链表...

  • 线性表-单向循环链表

    为了方便,本文介绍的单向循环链表不包含头节点 单向循环链表内容 单向循环链表的的定义 单向循环链表的创建 单向循环...

  • 10.单向循环链表SingleCycleLinkList

    目录:1.单向循环链表的定义2.单向循环链表的图解3.单向循环链表定义操作4.单向循环链表的实现 1.单向循环链表...

  • 数据结构与算法——线性表3

    线性表——单向循环链表 3、单向循环链表 在单向链表的基础上,单向链表的尾结点的Next指向链表的头部,就是为循环...

  • 04单向循环链表实现总结

    一、说说什么是单向循环链表? 人狠话不多. 上图. 单向循环链表就是这个样子!单向循环链表.png 与单向链表区别...

  • 数据结构基础--单向循环链表

    单向循环链表 单向循环链表是可循环的单链表,它与单链表的区别在于单向链表的最后一个元素的指针域为空,而单向循环链表...

  • 2019-12-04 Java-LinkedList源码解读

    @TOC 1、链表数据结构 链表分为单向链表和双向链表,他们的区别在于,单向链表只能单向寻址,而双向链表可以双向寻...

  • 数据结构与算法之循环链表(3.4)

    目录 单向循环链表双向循环链表约瑟夫问题如何发挥循环链表的最大威力? 一 单向循环链表 单向循环链表 - 只有一个...

  • day03-双向链表

    双向链表: 单向链表只能单向查找,双向链表可以双向查找。 啥是双向链表? 双向链表可以双向查数据,所以就不存在单向...

  • 链表

    一、单向链表 单向链表的普通实现 Java实现: Kotlin实现: 单向链表的递归实现 Java实现: 二、双向...

网友评论

      本文标题:单向链表

      本文链接:https://www.haomeiwen.com/subject/umhyultx.html