• 数据结构1 -- 链表的基本方法实现


    package NodeList;
    
    public class NodeList {
    	static Node head;// 头结点 作为链表中第一个节点
    	static Node end;// 尾结点 作为链表中最后一个节点
    
    	public static void main(String[] args) {
    
    		head = new Node(0);
    		end = head;
    		addNodeBeforeList(new Node(-1));
    		addNodeBeforeList(new Node(-2));
    		addNodeAfterList(new Node(1));
    		addNodeAfterList(new Node(2));
    
    		showList();
    		System.out.println("List length is:" + getListLength());
    
    		deleteNode(0);
    		showList();
    		System.out.println("List length is:" + getListLength());
    	}
    
    	// 在链表头部插入节点
    	public static void addNodeBeforeList(Node n) {
    		// 先将带插入节点的next设为当前head
    		n.next = head;
    		// 再将带插入节点设为head
    		head = n;
    	}
    
    	// 在链表尾部插入节点
    	public static void addNodeAfterList(Node n) {
    		// 先将end的next设为n
    		end.next = n;
    		// 再将带插入节点n设为end
    		end = n;
    	}
    
    	// 从链表头部删除节点
    	public static void deleteNodeBeforeList() {
    
    		head = head.next;
    
    	}
    
    	// 删除链表中包含指定元素的节点
    	public static void deleteNode(int num) {
    		Node current_node = head;
    		// 判断是否是头结点
    		if (current_node.data == num)
    			head = null;
    
    		boolean exist = false;
    
    		while (current_node.next!= null) {
    			// 先找到包含num元素节点的前一个节点
    			if ((current_node.next).data == num) {
    				exist = true;
    				// 如果是尾节点是包含num的节点
    				if ((current_node.next).next == null) {
    					// 设当前节点为尾节点
    					current_node.next = null;
    				} else {
    					current_node.next = current_node.next.next;
    
    				}
    
    			}
    
    			current_node = current_node.next;
    		}
    
    		if(!exist)
    		{
    			System.out.println("不存在");
    			
    		}
    		
    		
    		
    	}
    
    	// 遍历节点
    	public static void showList() {
    
    		Node current_node = head;
    
    		while (current_node != null) {
    			System.out.println(current_node.data);
    			current_node = current_node.next;
    
    		}
    
    	}
    
    	// 获得链表长度
    	public static int getListLength() {
    		Node current_node = head;
    		int len = 0;
    		while (current_node != null) {
    			len++;
    			current_node = current_node.next;
    
    		}
    		return len;
    
    	}
    
    }
    
    /*
     * 作为链表的基本节点类 两个成员变量 1. int data 节点中保存的数据 2. Node next 节点指向的下个节点
     */
    class Node {
    	int data;
    	Node next;
    
    	Node(int data) {
    		this.data = data;
    		next = null;
    	}
    
    	void setdata(int data) {
    		this.data = data;
    	}
    
    	void setNext(Node n) {
    		this.next = n;
    	}
    
    	int getdata() {
    
    		return data;
    	}
    
    	Node getNext()
    
    	{
    
    		return next;
    
    	}
    
    }
    

      结果:

    -2
    -1
    0
    1
    2
    List length is:5
    -2
    -1
    1
    2
    List length is:4
  • 相关阅读:
    std::queue
    关于GridView中如何取得隐藏列的值
    揭秘史上最昂贵的一行Javascript代码
    CentOS 安装 git2.x.x 版本
    error: Some data has already been output, can't send PDF file
    接口和抽象类有什么区别
    php与apache的那些事
    PHP生成PDF完美支持中文,解决TCPDF乱码
    php 表单相关
    快速的去除数组中的指定值
  • 原文地址:https://www.cnblogs.com/xiaodeyao/p/5301837.html
Copyright © 2020-2023  润新知