JS算法-链表插入排序

简介: JS算法-链表插入排序

题目


给定单个链表的头 head ,使用 插入排序 对链表进行排序,并返回 排序后链表的头

输入: head = [4,2,1,3]
输出: [1,2,3,4]


题解


我们在insertionSortList函数中接收一个头结点head作为输入,在首先定义了三个变量:retHead、retPrev和curr。retHead用于记录已排序链表的头结点,retPrev用于记录已排序链表的前一个节点,curr则是当前需要插入的节点,然后进入while循环,首先记录下一个需要插入的节点next,然后将当前节点的next属性设为null,这是因为在插入排序中,每次将一个节点插入到已排序部分中,需要将该节点的next属性设为null,然后将当前节点插入到已排序的链表中,这里通过调用insertNode函数实现的,插入后返回的头结点retHead将作为下一次迭代的基础,最后,当整个链表都被遍历完成后,返回排好序的链表,在insertNode函数中,首先定义了两个变量:curr和prev,它们分别用于遍历已排序的链表和记录当前节点的前一个节点,接着进入while循环,每次遍历都记录下一个节点的位置next,然后判断当前节点是否应该插入到当前节点的前面。如果是,就将该节点插入到已排序链表中,并返回新的头结点head,如果当前节点不应该插入到当前节点的前面,则继续遍历链表,将prev和curr指针向后移动,当已排序链表中的所有节点都遍历完后,如果当前节点需要插入到链表的末尾,则将其插入到链表中,并返回头结点head。如果链表为空,则将该节点作为新的头结点返回。

function insertionSortList (head) {
  let retHead = null
  let retPrev = null
  let curr = head
  while (curr) {
    const next = curr.next
    curr.next = null
    retHead = insertNode(retHead, curr)
    curr = next
  }
  return retHead
};
function insertNode(head, node) {
  let curr = head
  let prev = null
  while (curr) {
    const next = curr.next
    if (node.val < curr.val) {
      if (!prev) {
        node.next = head
        return node
      }
      else {
        prev.next = node
        node.next = curr
        return head
      }
    }
    prev = curr
    curr = next
  }
  if (prev) {
    prev.next = node
    return head
  }
  else {
    return node
  }
}
相关文章
|
30天前
|
JavaScript 算法 前端开发
JS算法必备之String常用操作方法
这篇文章详细介绍了JavaScript中字符串的基本操作,包括创建字符串、访问特定字符、字符串的拼接、位置查找、大小写转换、模式匹配、以及字符串的迭代和格式化等方法。
JS算法必备之String常用操作方法
|
30天前
|
JavaScript 算法 前端开发
JS算法必备之Array常用操作方法
这篇文章详细介绍了JavaScript中数组的创建、检测、转换、排序、操作方法以及迭代方法等,提供了数组操作的全面指南。
JS算法必备之Array常用操作方法
|
1月前
|
JavaScript 算法 前端开发
"揭秘Vue.js的高效渲染秘诀:深度解析Diff算法如何让前端开发快人一步"
【8月更文挑战第20天】Vue.js是一款备受欢迎的前端框架,以其声明式的响应式数据绑定和组件化开发著称。在Vue中,Diff算法是核心之一,它高效计算虚拟DOM更新时所需的最小实际DOM变更,确保界面快速准确更新。算法通过比较新旧虚拟DOM树的同层级节点,递归检查子节点,并利用`key`属性优化列表更新。虽然存在局限性,如难以处理跨层级节点移动,但Diff算法仍是Vue高效更新机制的关键,帮助开发者构建高性能Web应用。
47 1
|
1月前
|
算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
【算法】合并两个有序链表(easy)——递归算法
|
1月前
|
存储 算法
【初阶数据结构篇】顺序表和链表算法题
此题可以先找到中间节点,然后把后半部分逆置,最近前后两部分一一比对,如果节点的值全部相同,则即为回文。
|
1月前
|
算法
【数据结构与算法】共享双向链表
【数据结构与算法】共享双向链表
12 0
|
1月前
|
算法
【数据结构与算法】双向链表
【数据结构与算法】双向链表
11 0
|
1月前
|
算法
【数据结构与算法】循环链表
【数据结构与算法】循环链表
13 0
|
1月前
|
存储 算法
【数据结构与算法】链表
【数据结构与算法】链表
17 0
|
存储 算法 JavaScript
JavaScript 数据结构与算法 之 链表
JavaScript 数据结构与算法 之 链表