자바 단일 체인 테이블 반전 실현
1683 단어 데이터 구조
1. 문제 설명
1 - - > 2 - > 3 - > 4 - > 5 - > null 과 같은 단 방향 링크 를 반전 시 킵 니 다.
뒤 집 힌 결 과 는 5 - > 4 - > 3 - > 2 - > 1 - > null 입 니 다.
2. 해결 방안
링크
링크 를 배열 로 나 눈 다음 에 배열 의 역 서 를 링크 로 조립 하 다.
이 방법 은 간단 하고 지침 이 많이 필요 없 으 며 n 개 단위 의 공간 이 필요 하 다 는 단점 이 있다.
B 포인터 역순
세 개의 지침 은 각각 현재 노드 (p), 현재 노드 의 다음 노드 (q), q 의 다음 노드 (r) 를 가리킨다.r 의 존 재 는 q 의 next 포인터 가 p 를 가리 킬 때 원래 q 의 next 값 을 잃 어 버 리 지 않 습 니 다.원본 코드 는 다음 과 같다.
public class Node {
public int value;
public Node next;
public Node(int value) {
this.value = value;
}
public boolean hasNext() {
return next != null;
}
}
private static Node reverse(Node node) {
Node p = node;
Node q = p.next;
Node r;
p.next = null;
while (q != null) {
r = q.next;
q.next = p;
p = q;
q = r;
}
return p;
}
C 재 귀 법
먼저, 첫 번 째 노드 뒤의 부분 D 를 하나의 전체 로 보고 D 는 이미 역순 이 라 고 생각한다. 지금 해 야 할 일 은 첫 번 째 노드 와 D 노드 로 구 성 된 링크 를 역순 으로 하 는 것 이다.
그 다음 에 D 노드 내부 에 대해 역 순 서 를 하고 똑 같은 사고 로 처리 해 야 한다.
다시 한 번, 재 귀 출구 는 D 노드 의 next 가 비어 있 을 때 D 노드 가 마지막 노드 라 는 것 을 설명 하고 바로 돌아 가면 됩 니 다.
원본 코드 는 다음 과 같 습 니 다.
/**
*
* @param node
* @param pre
* @return
*/
private static Node reverseRecursion(Node node, Node pre) {
Node head = node;
Node pnext = head.next;
head.next = pre;
if (pnext == null) {
return head;
}
return reverseRecursion(pnext, head);
}
이상
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.