【发布时间】:2021-03-04 11:23:01
【问题描述】:
我的问题是关于链表和指针 我知道链表及其工作原理,但我的问题是:
我有这个例子奇偶链表:
// This is class node for create nodes
class Node {
constructor(val, next) {
this.val = val === undefined ? 0 : val;
this.next = next === undefined ? null : next;
}
}
// this is our function to return odd nodes followed bt even nodes
// * return the index of node not the value so if node index is 1 and value is 2
// thats mean odd node not even cuz we don't care about value
// consider that index start from 1 not from 0
const oddEvenLinkedList = function (head) {
if (!head) return head;
var odd = head
var even = head.next
var evenHead = even
while (odd.next) {
odd.next = even.next
odd = odd.next
even.next = odd.next
even = even.next
}
odd.next = evenHead
return head;
};
// create our linked list
// Node takes two params Node(value, next_node)
const head = new Node(1,
new Node(2,
new Node(3,
new Node(4,
new Node(5,
new Node(6,
new Node(7)))))))
console.log(oddEvenLinkedList(head));
结果将是:
head = [1,3,5,2,4,6,7] // odd numbers followed by even nubmers
所以我的问题是: 当我们添加时这里发生了什么:
var odd = head
var even = head.next
var evenHead = even
我知道odd var 现在将是:[1,2,3,4,5,6]
同时even 将是:[2,3,4,5,6,7]
问题是:odd 和 even 循环后将等于:
odd = [7]
even = null
在最后一行添加:odd.next = evenHead
这意味着odd 将等于odd=[7,1,2,3,4,5,6,7]
但是当我返回odd 时会是这样的:odd=[1,3,5,2,4,6,7]
同时当我返回head 将等于odd 相同的结果:
head=[1,3,5,2,4,6,7]
为什么odd var 会影响head 和even var 会影响evenHead?
希望你明白我的意思:
上面的解释不懂就简单总结一下
let head = [1,2,3,4,5] // linked list 1->2->3...etc
let x = main
let z = main
//for example when change x or z :
x.next = null
//or
z.next = null // or whatever value
// any changes we do in z or x will affect the head, why?
class Node {
constructor(val, next) {
this.val = val === undefined ? 0 : val;
this.next = next === undefined ? null : next;
}
}
var oddEvenLinkedList = function (head) {
if (!head) return head;
var odd = head
var even = head.next
var evenHead = even
while (odd.next) {
odd.next = even.next
odd = odd.next
even.next = odd.next
even = even.next
}
odd.next = evenHead
return head;
};
const head = new Node(1, new Node(2, new Node(3, new Node(4, new Node(5, new Node(6, new Node(7)))))))
console.log(oddEvenLinkedList(head));
【问题讨论】:
标签: javascript pointers linked-list javascript-objects