단일 연결 목록:
* 1. 연결 목록은 순서가 있는 목록이거나 순서가 없는 목록일 수 있습니다.
* 2. 연결 목록의 내용은 일반적으로 분산될 때까지 메모리에 저장됩니다.
* 3. 연결 목록은 노드로 구성됩니다. 각 노드는 동일한 구조를 가집니다
* 4. 노드는 데이터 도메인과 체인 도메인으로 구분됩니다. 데이터 도메인은 노드 내용을 저장하고, 체인 도메인은 다음 노드의 포인터를 저장합니다
package myLinkList;
public class MyLinkedList
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.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 중국어 웹사이트의 기타 관련 기사를 참조하세요!