다음 클로즈를 완성해 보세요:
/ * 대기열 생성, head는 head0, tail은 tail0 */
function IntList(head0, tail0){
this.head = head0 || 0; 🎜>}
/* 배열의 모든 숫자를 포함하는 IntList 반환*/
IntList.list = function(__args){
var sentinel = new IntList(),
len = __args. 길이,
p = sentinel;
for(var i = 0; i < len; i ){
p.tail = new IntList(__args[i])
p = p.tail ;
}
return sentinel.tail;
};
/* 객체의 문자열 표현을 반환합니다.*/
IntList.prototype.toString = function() 🎜>var temp = "";
temp = "[";
for(var L = this; L !== null; L = L.tail){
temp = temp " " L. head;
}
temp = " ]";
return temp;
/**IntList A와 IntList B를 포함하는 IntList를 반환합니다.
* 여기서 B의 요소는 A 뒤에 옵니다. new 키워드는 사용할 수 없습니다.
*/
function dcatenate(A, B) {
/* 함수 전체*/
}
/**길이가 len인 새 IntList를 반환합니다.
* #start 요소(여기서 #0은 첫 번째 요소)로 시작하며
*는 L을 변경할 수 없습니다.
*/
함수 하위 목록(L, start, len){
/* 함수 전체*/
}
자바스크립트로 작성한 링크드리스트 질문입니다. 연결된 목록에는 상대적으로 복잡한 참조 작업이 있으므로 Javascript 참조에 대한 이해를 조사하는 데 사용할 수 있습니다. 간단한 테스트 케이스와 함께 제공:
코드 복사
코드는 다음과 같습니다: /* dcatenate 및 sublist 테스트 기능이 올바른지*/ 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 함수가 정확합니다. ");
}else{
alert("dcatenate 함수가 잘못되었습니다.")
}
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 함수가 정확합니다.");
}else{
alert("sublist 함수가 정확합니다.");
}
}
자바스크립트 참조?
사실 참조 유형 인스턴스를 변수에 할당하면 변수는 인스턴스에 대한 참조를 보유합니다.
var temp = new Object()
이 동작은 이름, 참조 유형과 매우 일치하며 해당 인스턴스도 물론 참조됩니다.
그리고 변수가 다른 변수에 할당되면 실제로는 참조의 복사본일 뿐입니다.
var temp2 = 온도;
따라서 temp2 = temp 정의에서는 직접적인 관련이 없습니다. 예를 들어 temp 참조가 수정됩니다.
코드 복사
}
var temp2 =
temp; {
name: "not temp2"
};
temp === temp2; //false
물론 포인터가 가리키는 인스턴스만 수정한다면 , temp2는 여전히 temp와 동일합니다.
코드 복사
};
var temp2 = temp.name = "temp2"
temp === temp2; 🎜>
IntList란 무엇인가요? 아래 사진을 분석해 보겠습니다.
두 개의 빈 변수를 생성하므로 오른쪽 그림의 L과 Q가 비어 있습니다. 머리가 3이고 꼬리가 비어 있는 새 IntList를 만들고 L이 참조하는 값을 Q에 할당하여 L과 Q가 모두 이 새 IntList를 가리키도록 합니다. Q는 헤드가 42이고 꼬리가 비어 있는 새로 생성된 IntList를 가리킵니다. Q의 포인터는 L.tail에 할당되므로 두 IntList가 중첩됩니다.
IntList는 Linked List라고 불리는 포인터를 통해 다중 중첩을 이루는 데이터 구조임을 알 수 있습니다.
1. 두 개의 빈 변수를 생성하므로 오른쪽 그림의 L과 Q가 비어 있습니다.
2. 헤드가 3이고 테일이 비어 있는 새 IntList를 만듭니다. L에서 참조하는 값을 Q에 할당하여 L과 Q가 모두 이 새 IntList를 가리킵니다.
3.Q는 헤드가 42이고 꼬리가 비어 있는 새로 생성된 IntList를 가리킵니다. 그러면 두 IntList가 중첩되도록 Q의 포인터를 L.tail에 할당합니다.
IntList는 Linked List라고 불리는 포인터를 통해 다중 중첩을 이루는 데이터 구조임을 알 수 있습니다.
IntList merge
한 쪽의 꼬리를 다른 쪽을 가리키기만 하면 됩니다. 이런 식으로 두 개의 IntList가 연결됩니다.
/**IntList A와 IntList B를 포함하는 IntList를 반환합니다.
* 여기서 B의 요소는 A 뒤에 옵니다. new 키워드는 사용할 수 없습니다.
*/
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 차단
질문에서는 원본 IntList를 변경할 수 없어야 하므로 원본 IntList에서 데이터를 가져와서 새 데이터를 재구성하는 것만 가능합니다.
/**길이가 len인 새 IntList를 반환합니다.
* #start 요소(여기서 #0은 첫 번째 요소)로 시작하며
*는 L을 변경할 수 없습니다.
*/
함수 하위 목록(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.tail;
}else if(i >= end){
break
}
}
return K;
생각하는 질문
1. 함수는 매개변수가 전달될 때 어떻게 전달합니까? 예를 들어, 다음 코드의 인용 프로세스는 무엇입니까?
name: "무엇이든"
};
function getName(__obj){
return __obj.name;
var name = getName(obj);