# NC70.单链表排序

TIP

标签:链表、排序

# 描述

给定一个无序单链表,实现单链表的排序(按照升序排列)

# 示例:

输入:[1,3,2,4,5]
输出: {1,2,3,4,5}
1
2

# 算法思路

值排序,不是真正做到链表排序,直接遍历整个链表,用一个数组存储所有的val,然后进行排序,最后将排序完的值赋给链表。

/*
 * function ListNode(x){
 *   this.val = x;
 *   this.next = null;
 * }
 */

/**
 * 
 * @param head ListNode类 the head node
 * @return ListNode类
 */
function sortInList( head ) {
  // write code here
  // 值排序不是真正的排序,需要遍历整个链表,用一个数组存储所有的val
  // 然后进行排序 最后将排序完的值赋值给链表
  if(head == null || head.next ==null) {
    // 这里注意返回值是 ListNode 
    return head // 不需要排序
  }
  // 如何提高项目的复杂度
  let arr = []
  let temp = head
  
  while(temp !== null) {
    arr.push(temp.val)
    temp = temp.next
  }
  
  arr.sort((a,b)=>{
    return a - b // 升序排列
  })
  let tmp = head
  while(tmp !== null) {
    tmp.val = arr.shift()
    tmp = tmp.next
  }
  return head
}
module.exports = {
  sortInList : sortInList
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
最后更新时间: 12/7/2022, 6:59:48 AM