微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JavaScript 中的反向对象列表

如何解决JavaScript 中的反向对象列表

我只是在面试问题中挣扎:

请反转对象列表。

我的解决方案是否正确? 你会如何分析这个? 是否有更有效的方法来反转单个对象列表?

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 是一个新对象

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。