lista de enlaces individuales de Java


El contenido del artículo se selecciona de la estructura de datos y el algoritmo de Silicon Valley, jdk8, entorno de eclipse.

Lista individualmente vinculada en orden de inserción

package linkedlist;

public class SingleLinkedListDemo {
    
    
	public static void main(String[] args) {
    
    
		HeroNode hero1 = new HeroNode(1,"宋江","及时雨");
		HeroNode hero2 = new HeroNode(2,"卢俊义","玉麒麟");
		HeroNode hero3 = new HeroNode(3,"吴用","智多星");
		HeroNode hero4 = new HeroNode(4,"林冲","豹子头");
		
		SingleLinkedList test = new SingleLinkedList();
		test.addNode(hero1);
		test.addNode(hero2);
		test.addNode(hero4);
		test.addNode(hero3);
		
		test.showList();
	}
}

class HeroNode{
    
    
	int no ;
	String name;
	String nickname;
	HeroNode next;
	
	public HeroNode(int no,String name,String nickname){
    
    
		this.no = no;
		this.name = name;
		this.nickname = nickname;
	}
	
	@Override
	public String toString() {
    
    
		return "HeroNode [no=" + no + ", name=" + name + ", nickname=" + nickname +  "]";
	}
	
	
}

class SingleLinkedList{
    
    
	HeroNode head = new HeroNode(0,"","");
	
	public void addNode(HeroNode node){
    
    
		HeroNode tmp = head;
		while(true){
    
    
			if(tmp.next == null)
			{
    
    
				tmp.next = node;
				break;
			}
			tmp = tmp.next;
		}
	}
	
	public void showList(){
    
    
		HeroNode tmp;
		if(head.next == null)
		{
    
    
			System.out.println("列表是空的");
			return;
		}
		tmp = head;
		tmp = tmp.next;
		while(true){
    
    
			if(tmp.next == null)
			{
    
    
				System.out.println(tmp);
				break;
			}
			System.out.println(tmp);
			tmp = tmp.next;
		}
	}
}

El resultado de la operación es

HeroNode [no = 1, nombre =
宋江, apodo =时时雨] HeroNode [no = 2, nombre =
卢俊义, apodo = 玉麒麟] HeroNode [no = 4, nombre =
林冲, apodo =豹子头] HeroNode [no = 3 , nombre = Wu Yong, apodo = Zhiduoxing]

La salida de la lista enlazada está completamente de acuerdo con el orden de adición de la lista enlazada, y no hay forma de insertarla y sacarla de acuerdo con el orden de los números.

Código de análisis:

Primero, cree una clase HeroNode de nodo héroe, que debe tener un constructor y un toString () anulado para facilitar la salida. toString () es un método reescrito por eclipse y no puede contener el siguiente atributo; de lo contrario, se mostrarán todos los objetos desde el nodo inicial hasta el nodo final.

Luego cree una clase SingleLinkedList, tome la variable del tipo de datos de referencia de la clase HeroNode como el parámetro formal del método de la clase SingleLinkedList y luego llame al método de la clase SingleLinkedList en el método principal.

Lista individualmente enlazada insertada en orden de etiqueta

La lista enlazada individual insertada en el orden de las etiquetas significa que el orden lógico de la lista enlazada se organiza en secuencia según el número de objetos. Sobre la base del anterior, se agregan tres nuevos métodos: addNodeByOrder, modifiedNode y delNode

package linkedlist;

public class SingleLinkedListDemo {
    
    
	public static void main(String[] args) {
    
    
		HeroNode hero1 = new HeroNode(1,"宋江","及时雨");
		HeroNode hero2 = new HeroNode(2,"卢俊义","玉麒麟");
		HeroNode hero3 = new HeroNode(3,"吴用","智多星");
		HeroNode hero4 = new HeroNode(4,"林冲","豹子头");
		
		SingleLinkedList test = new SingleLinkedList();
//		test.addNode(hero1);
//		test.addNode(hero2);
//		test.addNode(hero4);
//		test.addNode(hero3);
		
		test.addNodeByOrder(hero3);
		test.addNodeByOrder(hero2);
		test.addNodeByOrder(hero1);
		test.addNodeByOrder(hero4);
		
		HeroNode newHero = new HeroNode(2,"小卢","小玉");
		test.modifyNode(newHero);
		
		test.showList();
		
		test.delNode(2);
		
		test.showList();
		
		test.delNode(4);
		
		test.showList();
	}
}

class HeroNode{
    
    
	int no ;
	String name;
	String nickname;
	HeroNode next;
	
	public HeroNode(int no,String name,String nickname){
    
    
		this.no = no;
		this.name = name;
		this.nickname = nickname;
	}
	
	@Override
	public String toString() {
    
    
		return "HeroNode [no=" + no + ", name=" + name + ", nickname=" + nickname +  "]";
	}
	
	
}

class SingleLinkedList{
    
    
	HeroNode head = new HeroNode(0,"","");
	
	public void addNode(HeroNode node){
    
    
		HeroNode tmp = head;
		while(true){
    
    
			if(tmp.next == null)
			{
    
    
				tmp.next = node;
				break;
			}
			tmp = tmp.next;
		}
	}
	
	public void addNodeByOrder(HeroNode node){
    
    
		HeroNode tmp = head;
		boolean flag = false;
		while(true){
    
    
			if(tmp.next == null){
    
    
				break;
			}else if(tmp.next.no > node.no){
    
    
				
				break;
			}else if(tmp.next.no == node.no )
			{
    
    
				flag = true;
				break;
			}
			tmp = tmp.next;
		}
		if(flag == true)
		{
    
    
			System.out.printf("输入的编号%d已存在",node.no);
			System.out.println();
		}
		
		else{
    
    
			node.next = tmp.next; //是tmp.next给node.next,不要记成了tmp.next.next,null是没有.next 属性的
			tmp.next = node;
		}
	}
	
	public void modifyNode(HeroNode node){
    
    
		HeroNode tmp = head;
		if(tmp.next == null)
		{
    
    
			System.out.println("列表为空");
			return;
		}
		while(true){
    
    
			if(tmp.next == null){
    
    
				System.out.println("没有找到要修改的节点");
				break;
			}
			if(tmp.next.no == node.no){
    
    
				tmp.next.name = node.name;
				tmp.next.nickname = node.nickname;
				System.out.println("已找到要修改的节点,修改节点成功");
				break;
			}
			tmp = tmp.next;
		}
	}
	
	public void delNode(int no){
    
    
		HeroNode tmp = head;
		if(tmp.next == null)
		{
    
    
			System.out.println("链表为空");
			return;
		}
		while(true){
    
    
			if(tmp.next == null){
    
    
				System.out.println("没有找到要删除的节点");
				break;
			}
			if(tmp.next.no == no){
    
    
				tmp.next = tmp.next.next;
				System.out.println("删除节点成功");
				break;
			}
			tmp = tmp.next;
		}
	}
	
	public void showList(){
    
    
		HeroNode tmp;
		if(head.next == null)
		{
    
    
			System.out.println("列表是空的");
			return;
		}
		tmp = head;
		tmp = tmp.next;
		while(true){
    
    
			if(tmp.next == null)
			{
    
    
				System.out.println(tmp);
				break;
			}
			System.out.println(tmp);
			tmp = tmp.next;
		}
	}
}

Para estos tres métodos, tmp apunta al elemento anterior del objeto que se va a manipular y el objeto de destino se manipula a través de tmp.next.

Entre ellos, el núcleo del método addNodeByOrder () de sumar en orden numérico es

			node.next = tmp.next; //是tmp.next给node.next,不要记成了tmp.next.next,null是没有.next 属性的
			tmp.next = node;

Si inserta C en A, B, primero dé la dirección de B al siguiente campo de C, deje que C apunte a B, y luego dé la dirección de C al siguiente campo de A, deje que A apunte a C, es decir , A-> C-> operación de inserción de B.


El código central del método delNode () es

				tmp.next = tmp.next.next;

Si desea eliminar B en A, B y C, le da directamente la dirección de C al siguiente campo de A, de modo que A apunte directamente a C y B no tenga un puntero, será basura recolectada por la JVM.


ModifyNode (nodo HeroNode) significa modificar los atributos de un nodo. Se debe crear un nuevo nodo con anticipación y los atributos del nuevo nodo deben asignarse al nodo anterior, pero tenga en cuenta que debido a que la lista vinculada se agrega en orden de numeración, todos los métodos de modificación de nodos no pueden modificar el número de nodo.

			if(tmp.next.no == node.no){
    
    
				tmp.next.name = node.name;
				tmp.next.nickname = node.nickname;
				System.out.println("已找到要修改的节点,修改节点成功");
				break;
			}

El resultado de la operación es

Se ha encontrado el nodo que se va a modificar y la modificación del nodo se ha realizado correctamente.
HeroNode [no = 1, name =
宋江, nickname =时光雨] HeroNode [no = 2, name = 小 卢, nickname =
小玉] HeroNode [ no = 3, nombre = 吴 用, apodo = 智多星]
HeroNode [no = 4, nombre = 林 Chong, apodo =豹子头]
Se eliminó con éxito el nodo
HeroNode [no = 1, nombre =
宋江, apodo = Lluvia oportuna] HeroNode [ no = 3, nombre = Wu Yong, apodo = 智多星]
HeroNode [no = 4, nombre = Lin Chong, apodo =豹子头]
Se eliminó con éxito el nodo
HeroNode [no = 1, nombre = Song Jiang, apodo = Timely Rain]
HeroNode [no = 3, nombre = Wu Yong, apodo = 智多星]

Supongo que te gusta

Origin blog.csdn.net/Meloneating/article/details/115065010
Recomendado
Clasificación