天天看点

Java中单向链表的实现

Java中单向链表的实现

  • 单项链表

    链表的一种,有多个节点组成,对链表的访问必须从头开始访问

  • 建立节点结构
public class Node {
	int data ;//节点的数据
	Node next = null;//指向下一个节点的“指针”
	public Node(){}
	public Node(int data) {
		this.data = data;
	}
	//添加新节点这里用的递归,直到他的西下一个节点为空就加上新节点
	public void addNode(Node a) {
		if(this.next == null)
			this.next = a;
		else
			this.next.addNode(a);
	}
}
           
  • 建立链表
class Link{
	Node root = null;
	//实例化链表的方法
	Link(){}
	Link(int data){
		Node a = new Node(data);
		root = a;
	}
	//给链表添加新元素
	public void add(int a) {
		Node temp = new Node(a) ;
		root.addNode(temp);
	}
	//遍历链表并且输出结果
	public void get() {
		Node temp = root;
		while(temp != null) {
			System.out.print(temp.data);
			if(temp.next != null) {
				System.out.print("-");
				temp = temp.next;
			}
			else 
				temp = null;
		}
		System.out.println();
	}
	//获取链表的长度
	public int length() {
		int i = 1;
		Node temp = this.root;
		if(temp != null) {
			while(temp.next != null) {
				i = i+1;
				temp = temp.next;
			}
			return i;
		}else {
			return 0;
		}
	}
	//删除链表中值为a的节点
	public void del(int a) {
		Node temp = root;
		while(temp.next != null) {
			if(temp.data == a) {
				this.root = temp;
			}
			if(temp.next != null) {
				if(temp.next.data == a) {
					if(temp.next.next ==null) {
						temp.next = null;
					}else {
						temp.next = temp.next.next;
					}
				}else {
					temp = temp.next;
				}
			}
			else 
				temp = null;
		}
	}
	//在链表中值为a的节点后添加一个值为newvalue的节点
	public void insert(int a,int newvalue) {
		Node newnode = new Node(newvalue);
		Node temp = root;
		while(temp != null) {
			if(temp.data == a) {
				newnode.next = temp.next;
				temp.next = newnode;
			}
			if(temp.next != null) {
				temp = temp.next;
			}
			else {
				temp = null;
			}
		}
	}
	//在链表头部添加新节点
	public void pop(int a) {
		Node newnode = new Node(a);
		newnode.next = root;
		root = newnode;
	} 
}
           
  • 测试代码
package 链表;

public class Demo {
	public static void main(String[] args) {
		Link li = new Link(1);
		li.add(2);
		li.add(3);
		li.add(4);
		li.add(5);
		li.add(6);
		li.get();
		System.out.println(li.length());
		li.del(3);
		li.get();
		System.out.println(li.length());
		li.insert(2,99);
		li.get();
		li.pop(88);
		li.get();
	}
}

           
  • 运行结果
    Java中单向链表的实现
  • 总结

    节点中的信息不一定说必须得是这么少,具体看用的时候的需求来定。

继续阅读