JZ 15 - 링크 반전 (JS)
3006 단어 JZoffer
링크 를 입력 하고 링크 를 반전 시 킨 후 새 링크 의 헤더 를 출력 합 니 다.
제목 해석:
우 객 이 문 제 를 푸 는 것 은 완벽 하 다!
제목 은 싱글 체인 시트 입 니 다. 반전 후의 모습 을 생각해 보 았 습 니 다. 마지막 노드 는 꼴찌 두 번 째, 꼴찌 두 번 째 는 꼴찌 세 번 째, 두 번 째 는 첫 번 째, 첫 번 째 는 null 을 가리 키 고 있 습 니 다.반전 후 각 노드 가 어디 를 가리 키 는 지 알 게 되면 각 노드 의 next 지침 을 조정 해 야 한다.이것 은 결점 을 하나하나 체인 시계 에서 떼 어 내 고 조정 해 야 한다.이 조정 과정 은 두 개의 포인터 보조 가 필요 합 니 다. pre 는 앞의 노드 위 치 를 기록 하여 이 노드 의 next 포인터 가 앞의 노드 를 가리 키 도록 해 야 합 니 다. 그러나 앞의 노드 를 가리 키 기 전에 하나의 포인터 p 로 뒤의 노드 주 소 를 기록 하여 노드 를 잃 어 버 리 지 않도록 해 야 합 니 다.예: head 결점 을 예 로 들 면 다음 과 같다. 1. 반전 후 head 는 null 을 가리 키 기 때문에 반전 이 없 을 때 그 앞의 결점 은 null 이 어야 한다. pre 지침 을 null 로 초기 화 한다.2. 헤드 의 다음 노드 헤드. next 를 p 포인터 로 기록 합 니 다.3. 링크 에서 head 를 떼 면 head. next 가 pre 를 가리 키 게 합 니 다.4. 이때 헤드 노드 의 추출 과 이전 노드 와 의 연결 이 완료 되 었 으 면 다음 노드 를 조작 해 야 합 니 다. 따라서 pre 와 head 를 이동 하여 pre 가 head 를 가리 키 고 head 가 다음 노드 를 가리 키 도록 해 야 합 니 다.이 네 가지 조작 을 반복 하면 head 가 원래 의 링크 를 다 갈 때 까지 null 을 가리 킬 때 순환 이 끝나 고 pre 로 돌아 갑 니 다.
/*function ListNode(x){
this.val = x;
this.next = null;
}*/
function ReverseList(pHead)
{
// pre ,
var pre = null;
// p ,
var p = null;
//pHead null , 。
while(pHead != null){
// p 。
p = pHead.next;
// pre
pHead.next = pre;
//pre
pre = pHead;
//head p( head )
pHead = p;
}
return pre;
}