데이터 구조 - 단 방향 링 링크
27016 단어 데이터 구조
1. 마지막 요소 의 next 도 메 인 은 첫 번 째 요소 (first) 2 를 가리 키 고 중간 변 수 를 통 해 링크 를 옮 겨 다 닙 니 다. 만약 에 중간 변수의 next 도 메 인 이 first 와 같 으 면 링크 가 이미 옮 겨 다 녔 음 을 증명 합 니 다.3. 노드 를 추가 합 니 다. first 노드 는 고정 적 으로 변 하지 않 기 때문에 중간 변 수 를 통 해 이동 해 야 합 니 다. 노드 를 링크 의 임 의 위치 에 추가 할 수 있 습 니 다.데이터 사용 클래스
@Data
public class Person {
private int no;
private String name;
private Person next;
public Person(int no, String name, Person next) {
this.no = Math.abs(no);
this.name = name;
this.next = next;
}
@Override
public String toString() {
return "Person{" +
"no=" + no +
", name='" + name + '\'' +
'}';
}
}
단 방향 링 링크 (조세 프 계산)
@Slf4j
public class SingleCircleLinked {
private final String NAME = "test_";
private Person first = null;
/**
*
* @param num
*/
public void addTotal(int num) {
if (num < 1) {
log.info(" 1");
return;
}
/* , */
Person cur = null;
/* , */
Person person;
/* */
if (first == null) {
for (int i = 1; i <= num; i++) {
person = new Person(i, NAME + i, null);
/* ,first */
if (i == 1) {
first = person;
first.setNext(person);
cur = first;
/* , cur , */
} else {
cur.setNext(person);
person.setNext(first);
cur = person;
}
}
return;
}
/* */
/* cur , */
cur = first;
/* , */
while (true) {
if (cur.getNext() == first) {
break;
}
cur = cur.getNext();
}
/* */
for (int i = 1; i <= num; i++) {
person = new Person(i, NAME + i, null);
cur.setNext(person);
person.setNext(first);
/* */
cur = person;
}
}
/**
*
*/
public void show() {
if (first == null) {
log.info(" ");
return;
}
/* , */
Person cur = first;
/* */
while (true) {
System.out.println(cur);
/* next first, */
if (cur.getNext() == first) {
break;
}
cur = cur.getNext();
}
}
/**
*
*
* @param startNo
* @param num
*/
public void delete(int startNo, int num ) {
if (first == null) {
log.info(" ");
return;
}
if (startNo < 1) {
log.info(" 1");
return;
}
if (startNo > this.length()) {
log.info(" ");
return;
}
/* , first */
Person cur = first;
while (true) {
/* first */
if (cur.getNext() == first) {
break;
}
cur = cur.getNext();
}
/* , first、cur */
for (int i = 0; i < startNo - 1; i++) {
/* */
cur = cur.getNext();
/* */
first = first.getNext();
}
while (true) {
if (cur == first) {
break;
}
for (int i = 0; i < num - 1; i++) {
/* */
cur = cur.getNext();
/* */
first = first.getNext();
}
System.out.printf(" = %d, = %s
",first.getNo(),first.getName());
first = first.getNext();
cur.setNext(first);
}
System.out.printf(" : = %d, = %s
",first.getNo(),first.getName());
}
/**
*
*/
public int length() {
int i = 0;
if (first == null) {
return i;
}
Person cur = first;
while (true) {
i++;
if (cur.getNext() == first) {
break;
}
cur = cur.getNext();
}
return i;
}
}
테스트 클래스
public class SingleCircleLinkedDemo {
public static void main(String[] args) {
SingleCircleLinked singleCircleLinked = new SingleCircleLinked();
singleCircleLinked.addTotal(-1);
singleCircleLinked.addTotal(10000);
singleCircleLinked.show();
singleCircleLinked.delete(1,3);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.