[leetcode] reverse-linked-list

김_리트리버·2020년 9월 4일
0

[알고리즘]

목록 보기
10/47

https://leetcode.com/problems/reverse-linked-list/

var reverseList = function(head) {


// 처음 head 에 저장된 값을 current 통해 originValues 배열에 저장 
// 저장된 배열을 pop 을 통해 빼내며 reverse 에 연결된 원본 head를 변경 
    
    
    let current = head;
    let reverse = head;        
    let originValues = [];
    
    while(current)
        
        {

           originValues.push(current.val);
            
            current=current.next;
        }

  
    while(originValues.length>0)
        
        {
            
            reverse.val =  originValues.pop()
            reverse = reverse.next
            
        }
  
    
    return head;
    
};




//////////



var reverseList = function(head) {
// null 을 만들고 
// 기존 리스트의 next 가 가리키는 방향을 바꿔서 기존 null 을 가리키고 있던 
// 변수에 연결 

// 원본 : 1>2>3>4>5>null

// 반복해야 할 것 
// 1>null 
// 2>(1>null)
// 3>(2>1>null)
// 4>(3>2>1>null )
// 5>(4>3>2>1>null )

// 새로운 null 에 기존 head 에 있던 node를 연결 
    let rerverse = null;
// head 가 null 이 아닐 때까지 이동 
    while(head){

// 만약 초기에 head.next = reverse 를 해버리면 
// head가  1>null 이 되는데 그러면 2>3>4>5>null 을 가져올 방법이 없음 
// 기존 list 에서 사용할 node 를 제외한 ( = head.next) 를 저장을 해놓고  
// head.next 의 방향을 변경하여 기존 list 에서 node 를 빼돌리고
// head 는 앞서 저장해놓은 head.next 로 초기화 함  


// 1만 reverse 에 연결하고 나머지는 다음 반복때 써야 함 
// next 에 2>3>4>5>null 을 참조연결 
      let next = head.next;  
// next 에 1빼고 기존 list 연결 해놓음  
			  head.next = rerverse
// head = 1>null
				rerverse = head
// rerverse = 1>null 
				head = next
// 미리 연결시켜놓은 참조로 다시 초기화 시킴 
// head = 2>3>4>5>null
// rerverse = 1>null 

   }
    return rerverse;
};
profile
web-developer

0개의 댓글