我有一个LinkedList类,其中包含并按正确的顺序自动插入节点。请注意,这是一个链表数据结构(保存节点/元素的数组代表 RAM,指针 - head、tail以及 和next代表prevRAM 中的地址(但在本例中,它们是数组的索引,其中节点被保留)。
例如
myLinkedList.insert(2);
myLinkedList.insert(1);
myLinkedList.output(); // => [{value:2, next:null, prev:1}, {value:1,next:0,prev:null]}, head = 1, tail = 0
Run Code Online (Sandbox Code Playgroud)
所以现在当我调用我的printInOrder函数时,它将输出1,然后2,然后停止。
注意:当我插入一个新节点时,它会被推到数组的末尾,但其相邻节点的指针会发生变化(sonext和),以便从到 的prev类似火车的路径包括中的所有节点特定顺序(默认为升序)。所以插入的节点总是在末尾,只有它的指针表示它的位置。headtail
这是我的问题:(请参阅问题末尾的代码)
想象一下,我创建了一个链表,默认排序(升序),并且我有值 2、1 和 3。因此,当我迭代该列表时,我将收到 1,2,3。现在,我想重新排序链表。这意味着,每个节点的索引不会改变,但节点的指针会改变。毕竟,指针是创建顺序的。那么我将如何使用某种排序算法(例如合并或冒泡)来对我的节点进行排序,而无需实际更改它们的顺序,只需更改它们的next和prev指针(以及全局head和tail)。
这是到目前为止重新排序函数的代码,该函数当前使用冒泡排序但不起作用:
class LinkedList {
constructor(sortingFunction) {
this.head;
this.tail;
this.list = [];
this.sortingFunction = …Run Code Online (Sandbox Code Playgroud)