问题描述
我只是在面试问题中挣扎:
请反转对象列表。
我的解决方案是否正确? 你会如何分析这个? 是否有更有效的方法来反转单个对象列表?
var node3 = {data: 3,next: null}
var node3 = {data: 2,next: node3}
var node3 = {data: 1,next: node2}
// 逻辑上 // node1.next = node2.next = node3.next = null
const function reverse() {
var node = linkedlist;
var prevIoUs = null;
while(node) {
var save = node.next;
node.next = prevIoUs;
prevIoUs = node;
node = save;
}
return prevIoUs;
}
var myList = node1
myList = reverse(myList)
myList === node3 is true
myList = reverse(myList)
myList === node1 is true
解决方法
Linked data structure
Linked Lists - Computerphile
var node3 = { data: 3,next: null };
node3 = { data: 2,next: node3 };
node3 = { data: 1,next: node3 }; // <= your code here is node2
// To make it easier to understand I just set the entire LDS directly
// each next is point to next data,null means end of data
let node3 = {
"data": 1,"next": {
"data": 2,"next": {
"data": 3,"next": null
}
}
};
function reversLDS(LDS) {
let newLDS = null; // end of LDS
while (LDS) { // if not null
newLDS = {
data: LDS.data,// read data from LDS
next: newLDS // set next to previous newLDS(self)
};
LDS = LDS.next; // get next LDS
}
return newLDS;
}
let reversed = reversLDS(node3);
while (reversed) {
console.log(reversed);
reversed = reversed.next;
}
A
= 1st newLDS
B
= 第二个 newLDS
//↓A ↓B
newLDS = { data: LDS.data,next: newLDS };
这里B
还是旧的 newLDS
A
是一个新对象