>  기사  >  Java  >  Java의 단일 연결 목록 소개 및 사용법

Java의 단일 연결 목록 소개 및 사용법

零下一度
零下一度원래의
2017-06-25 10:28:031833검색

단일 연결 목록:
* 1. 연결 목록은 순서가 있는 목록이거나 순서가 없는 목록일 수 있습니다.
* 2. 연결 목록의 내용은 일반적으로 분산될 때까지 메모리에 저장됩니다.
* 3. 연결 목록은 노드로 구성됩니다. 각 노드는 동일한 구조를 가집니다
* 4. 노드는 데이터 도메인과 체인 도메인으로 구분됩니다. 데이터 도메인은 노드 내용을 저장하고, 체인 도메인은 다음 노드의 포인터를 저장합니다

package myLinkList;

public class MyLinkedList T data,Node next){
   this.data = data;
  this.next = next;
  }
}

private Node header;//Linked list head node
private Node tailer;/ /연결된 목록 tail node
private int size ;//연결된 목록의 길이(노드 수)


/**
*노드: 노드 객체
* 데이터 필드 데이터와 다음 링크 필드를 포함합니다(다음 노드 객체를 가리킴)
*/
public MyLinkedList() {//빈 매개변수 생성
  header = null;
 tailer = null;
}
public MyLinkedList(T data ) {//매개변수를 사용한 구성
 header = new Node(data,null);//헤더 노드 생성
 tailer = header;
 size++;
}

/**
* 연결리스트 초기화
*/
public int getSize() {
  return size;
}

/**
* 연결리스트의 길이를 알아보세요
* @return
*/
public T get(int index) {
  if(index < 0 || index > size- 1)
  새 IndexOutOfBoundsException("범위를 벗어난 인덱스");
  return getIndexNode(index).data;
}

public Node getIndexNode(int index){
 if(index < 0 || index > size- 1)
   새로운 IndexOutOfBoundsException("index out of ranges") ;
 Node current = header;
 for(int i = 0;i   size; i++) {
  if(i == index) {
  return current;
 }
 current = current.next;
}
  return null ;
}

/**
* 인덱스가 index인 노드의 데이터를 반환
* @param index index
* @return
*/
public int getIndex(T element) {
 if(element == null)
  return -1;
 Node current = 헤더;
 for(int i = 0; i < size; i++) {
  if(current.data == 요소){
   return i;
  }
 current = current.next;
}
  return -1;
}



/**
* 연결된 목록에 있는 요소의 위치를 ​​반환합니다. 요소가 없으면 -1을 반환합니다.
* @param tdata
* @return
*/
public void add(T 요소) {
 Node n = new Node(요소,null);
 if(header == null){
 header = n;
tailer = header;
}else{
 tailer.next = n;
 tailer = n;
}
 size++;
}

/**
* 연결 목록 끝에 요소 추가
* @param 요소
*/
public void addAtheader(T 요소) {
 header = new Node(element,header);
 if(tailer = = null){
  tailer = header;
 }
 size++;
}

/**
* 연결 목록의 선두에 요소 추가
* @param 요소
*/
public void insert(int index,T 요소) {
 if(index<0 || index>size- 1) {
  throw new IndexOutOfBoundsException("index out of ranges");
  }
 if(header==null){
  add(element);
 }else{
if(index==0){
  addAtheader(element);
 }else{
    Node current = getIndexNode(index);
   Node insertNode = new Node(element,current.next);
   current.next = insertN ode;
   size++ ;
   }
 }
}
/**
* 인덱스 위치 뒤에 요소 삽입
* @param index
* @param 요소
*/
public T deleteNode(int index){
 if(index<0 || index>size-1)
  throw new IndexOutOfBoundsException("index out of ranges" );
 if(index == 0){//헤드에서 요소 삭제
  Node n = header;//헤드 노드를 기록합니다
  header = header.next;//헤드 포인터를 다음 노드로 가리킵니다
  size- -;
  n.data 반환;//기록 노드의 내용을 출력
  }else {//다른 위치에서 삭제
  Node current = getIndexNode(index); //현재 노드 가져오기
  Node pre = getIndexNode(index- 1); //이전 노드를 가져옵니다
  pre.next = current.next;//Will 이전 노드의 체인 필드가 null로 설정됩니다
  size--;
  return current.data;//다음의 데이터 필드를 반환합니다. 삭제된 노드
 }


}
/**
* 임의의 위치에서 노드 삭제
* @param index
* @return
*/
public T deleteHeader(){
  return deleteNode(0);
}
/**
* 헤드 노드 삭제
* @return
*/
public T deleteTailer(){
return deleteNode(size-1);
}

//노드 지우기
public voidclear(){
  header = null;
  tailer = null;
  size = 0;
}

/**
* toString();
*/
public String toString(){
  if(size == 0)
    반환 "[]";
  Node current = header;
  StringBuilder sb = new StringBuilder();
  sb.append("[");
  while(current.next != null) {
    sb.append(current.data) .append("  ");
    current = current.next;
  }
  sb.append(current.data).append("]");
  return sb.toString();
}


public static void main (String[] args) {
  MyLinkedList link = new MyLinkedList<>();
  link.add("header");
  link.add("11");
  link.add("22");
  link.add("33");
  link.addAtheader("newheader");
  link.insert(2, "1.5");;

  System.out.println(link.getIndex("11"));
  System.out.println(link. getIndex("88"));
  System.out.println(link.get(0));
  System.out.println(link.getSize());
  System.out.println(link.deleteHeader()) ;
  System.out.println(link.deleteTailer());
  System.out.println(link.deleteNode(1));
  System.out.println(link);
  link.clear();
  System. out.println(링크);

  }

}

위 내용은 Java의 단일 연결 목록 소개 및 사용법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.