2017-12-05 7 views
0

정수 배열을 가져 와서 JavaScript로 단일 링크 된 목록을 만드는 데 문제가 있습니다. 그것은 쉽게 들리지만, 내가 가지고있는 기능으로는 보지 못하는 것이 있습니다. 당신이 제공 할 수있는 도움을 주시면 고맙겠습니다. 정수 배열에서 단일 링크 된 목록 만들기

내가 노드를 만드는 데 사용하는 생성자 함수입니다 :

function ListNode(val) { 
    this.val = val; 
    this.next = null; 
} 

그리고 이것은 내가 그이 배열을 가지고 그것의 링크 된 목록을 작성하도록되어 쓰고있는 기능입니다. 나는 몇 가지 기본 배열이 실행하려고했습니다

var createLinkedList = function(array) { 
    var head = new ListNode(parseInt(array[0])); 
    array.shift(); 
    while(array.length) { 
     var prev = new ListNode(parseInt(array[0])); 
     head.next = head; 
     prev = head; 
     array.shift(); 
    } 
    return head; 
} 

하고 언제나 배열의 마지막 값을 반환 기본적인 아이디어가 아무것도 이동하는 남아 있지 때까지 첫 번째 값을 이동 단지 while 루프입니다 연결된 목록 대신. 내가 여기서 볼 수없는 간단한 것이 있습니까? 미리 감사드립니다.

+0

힌트 :'head.next = head'는 순환 참조를 만듭니다. 'prev = head'는 어떻게 생각합니까? – nnnnnn

+0

제쳐두고,'parseInt (array.shift())'라고 말하면 첫 번째 요소의 값을 얻고 한 줄에서 모두 제거 할 수 있습니다. array [0]과 'array.shift()'를 별도로 사용하십시오. – nnnnnn

+0

원하는 출력을 코멘트 영역에 붙여주십시오. –

답변

1

문제는 array.shift이 아니지만 while 루프 내에서 노드를 서로 연결하는 방법입니다. 체인

노드 함께, 기본적으로 당신이 할 필요가 :

var new_node = new ListNode(parseInt(array[0])); 
head.next = new_node; 
new_node = new ListNode(parseInt(array[1])); 
head.next.next = new_node; 
new_node = new ListNode(parseInt(array[2])); 
head.next.next.next = new_node; 
. 
. 
. 

난 당신이 아이디어를 얻을 생각합니다. 따라서 while 루프를 다시 작성하고 tailNode의 참조를 저장하면 head.next.next.next.next.next = newNode을 호출하는 대신 tailNode.next = newNodetailNode = newNode을 while 루프 내에 호출 할 수 있습니다.

+0

나는 그것을 시도하고 있지만 머리를 처음에 연결하는 방법을 모른다. [link] https://jsfiddle.net/9xh5b5kr/은 지금 가지고있는 것이지만, 그것이 의미가 있다면 머리에 연결하는 방법을 모르겠다. – amacdonald

+0

순환 참조를 만들고 단일 연결 목록에는 의미가없는'current.next = current; '가 있습니다. 이 [link] (https://jsfiddle.net/9xh5b5kr/)를보고 newNode와 tail 노드 사이의 관계에 대해 생각해보십시오. – mckuok

+0

나는 정말로 여기에서 길을 잃는다. https://jsfiddle.net/9xh5b5kr/은 지금까지 시도한 것으로 배열의 첫 번째와 마지막 값을 사용하여 머리와 꼬리를 만들고 그 사이의 모든 것을 무시합니다. – amacdonald