Please try to complete the following cloze:
Copy Code code as follows:
/* Create a queue with head head0, tail for tail0 * *
function Intlist (head0, tail0) {
This.head = Head0 | | 0;
This.tail = Tail0 | | Null
}
/* Returns a intlist containing all the numbers in the array * *
Intlist.list = function (__args) {
var Sentinel = new Intlist (),
Len = __args.length,
p = Sentinel;
for (var i = 0; i < len; i++) {
P.tail = new Intlist (__args[i]);
p = p.tail;
}
return sentinel.tail;
};
/* Returns the string representation of the object * *
IntList.prototype.toString = function () {
var temp = "";
temp = "[";
for (var L = this; L!== null; L = L.tail) {
Temp = temp + "" + l.head;
}
temp = "]";
return temp;
};
/** returns a intlist containing intlist A and intlist B,
* Where the elements of B are behind a. You cannot use the New keyword.
*/
function Dcatenate (A, B) {
/* Complete function * *
}
/** returns a new intlist, the length of which is Len,
* Starts with the #start element (where #0 is the first element),
* Can't change L.
*/
function sublist (L, start, Len) {
/* Complete function * *
}
This is a linked list problem written in JavaScript. Because a linked list has a more complex reference operation, it can be used to examine the understanding of JavaScript references. Comes with simple test cases:
Copy Code code as follows:
/* Test dcatenate and sublist functions are correct * *
function Test () {
var A = Intlist.list ([4,6,7,3,8]),
B = Intlist.list ([3,2,5,9]);
Dcatenate (A, B);
if (a.tostring () = = "[4 6 7 3 8 3 2 5 9]") {
Alert ("Dcatenate function is correct.) ");
}else{
Alert ("Dcatenate function error.) ");
}
var L = Intlist.list ([3,4,5,2,6,8,1,9]),
result = Sublist (L, 3, 3);
if (result.tostring () = = "[2 6 8]") {
Alert ("sublist function is correct.) ");
}else{
Alert ("sublist function is correct.) ");
}
}
JavaScript reference?
In fact, when assigning a reference type instance to a variable, the variable holds a reference to the instance:
var temp = new Object ();
This performance is well suited to its name, reference type, and its instance is, of course, cited.
When the variable is then paid to another variable, it is actually just a copy of the reference:
var temp2 = temp;
So although in terms of definition: Temp2 = temp, they are not directly related, such as modifying the temp reference:
Copy Code code as follows:
var temp = {
Name: "Temp"
};
var temp2 = temp;
temp = {
Name: "Not Temp2"
};
temp = = Temp2; False
Of course, if we modify only the instance that the pointer points to, then temp2 still equals temp:
Copy Code code as follows:
var temp = {
Name: "Temp"
};
var temp2 = temp;
Temp.name = "also Temp2";
temp = = Temp2; True
What is Intlist?
Let's analyze the following figure:
Create two empty variables, so l and Q are empty in the right picture. Create a new intlist whose head is 3, the tail is empty, assign the value of L reference to Q, so L and Q all point to the new intlist. Q points to a newly created intlist whose head is 42, the tail is empty, and the pointer to the Q is assigned to L.tail so that the two intlist quilt is embedded.
Visible intlist is a data structure that achieves multiple nesting through pointers, known as a linked list (linked list).
1. Create two empty variables, so l and Q are empty in the right picture.
2. Create a new intlist whose head is 3, the tail is empty, assign the value of L reference to Q, so L and Q all point to the new intlist.
3.Q points to a newly created intlist whose head is 42, the tail is empty, and the pointer to the Q is assigned to L.tail so that the two intlist quilt is embedded.
Visible intlist is a data structure that achieves multiple nesting through pointers, known as a linked list (linked list).
Intlist Merge
We just need to point one of the tails to the other. So the two intlist are connected:
Copy Code code as follows:
/** returns a intlist containing intlist A and intlist B,
* Where the elements of B are behind a. You cannot use the New keyword.
*/
function Dcatenate (A, B) {
var p;
for (p = A; p!= null; p = p.tail) {
if (P.tail = = null) {
P.tail = B;
Break
}
}
Return A
}
Intlist Intercept
Because the problem requirements can not change the original intlist, so we can only remove the data from the original intlist and reconstruct a new data.
Copy Code code as follows:
/** returns a new intlist, the length of which is Len,
* Starts with the #start element (where #0 is the first element),
* Can't change L.
*/
function sublist (L, start, Len) {
var K,
P
J
var i = 0,
End = start + len;
for (P = L; I <= end; P = P.tail, i++) {
if (I < start) {
Continue
}else if (i = = start) {
K = new Intlist (p.head);
J = K;
}else if (i > Start && i < end) {
J.tail = new Intlist (p.head);
J = J.tail;
}else if (i >= end) {
Break
}
}
return K;
}
Study Questions
1. How does the function pass the parameter? For example, what is the reference procedure for the following code?
Copy Code code as follows:
var obj = {
Name: "Anything"
};
Function GetName (__obj) {
return __obj.name;
}
var name = GetName (obj);