单链表的增删查改

今天学习了单链表的增删查改,把保存到博客里—_—

public class LinkList { // 该类用于实现链表的增删查改
	public Node head = null;// 定义链表头部

	public void initialize() {// 该方法用于初始化链表
		head = new Node();// 头部下标是-1
	}

	public int length() {// 返回链表的长度
		int length = 0;
		Node temp = head;
		while (temp.next != null) {
			length++;
			temp = temp.next;
		}
		return length;
	}

	public void addNode(Node node) {// 在链表尾部添加节点
		Node temp = head;
		while (temp.next != null) {
			temp = temp.next;
		}
		temp.next = node;
	}

	public void insertNode(int index, Node node) {// 在指定位置上插入节点
		if (!(index >= 0 & index <= length())) {
			System.out.println("插入的位置不存在");
		} else {
			int length = 0;
			Node temp = head;
			while (temp.next != null) {
				if (index == length) {
					node.next = temp.next;
					temp.next = node;
					return;
				}
				length++;
				temp = temp.next;
			}
			temp.next = node;
		}
	}

	public void indexDeleteNode(int index) {// 删除指定位置上的节点
		if (!(index >= 0 & index < length())) {
			System.out.println("删除的下标位置不存在");
		} else {
			int length = 0;
			Node temp = head;
			while (temp.next != null) {
				if (index == length) {
					temp.next = temp.next.next;
					return;
				}
				length++;
				temp = temp.next;
			}
		}
	}

	public void valueDeleteNode(Object o) {// 删除值为o的节点
		Node temp = head;
		while (temp.next != null) {
			if (temp.next.value.equals(o)) {
				temp.next = temp.next.next;
				return;
			}
			temp = temp.next;
		}
		System.out.println("链表中没有值为" + o + "的节点");
	}

	public int valueSeek(Object o) {// 查找o在链表中的下标,没有返回-1
		int index = 0;
		Node temp = head;
		while (temp.next != null) {
			if (temp.next.value.equals(o)) {
				return index;
			}
			index++;
			temp = temp.next;
		}
		return -1;
	}

	public void printNode(Node header) {// 该方法用于输出链表
		System.out.print("链表");
		Node temp = header;
		while (temp.next != null) {
			System.out.print("\t" + temp.next.value);
			temp = temp.next;
		}
		System.out.println();
	}

	public void changeValue(int index, Object value) {// 更改指定下标的值
		if (!(index >= 0 & index < length())) {
			System.out.println("更改的下标位置不存在");
		} else {
			int length = 0;
			Node temp = head;
			while (temp.next != null) {
				if (index == length) {
					temp.next.value = value;
					return;
				}
				length++;
				temp = temp.next;
			}
		}
	}
}

class Node {// 定义链表的实体类
	public Object value = null;
	public Node next = null;

	public Node(Object value) {
		this.value = value;
	}

	public Node() {
	}

链表的测试类,使用前要先初始化—_— 

public class LinkListMain {
	public static void main(String[] args) {
		LinkList linkList = new LinkList();
		linkList.initialize();// 初始化链表
		linkList.addNode(new Node(2)); // 向链表尾部添加节点
		linkList.addNode(new Node(3));
		linkList.addNode(new Node(4));
		linkList.addNode(new Node(5));
		linkList.addNode(new Node(6));
		linkList.addNode(new Node(7));
		linkList.printNode(linkList.head);// 输出链表内容
		System.out.println("链表长度" + linkList.length());// 输出链表长度
		linkList.indexDeleteNode(2);// 删除下标为2的节点(下标从0开始)
		linkList.valueDeleteNode(6);// 删除值为6的节点
		System.out.println("删除后");
		linkList.printNode(linkList.head);// 输出链表内容
		System.out.println("链表长度" + linkList.length());// 输出链表长度
		linkList.insertNode(3, new Node(10));// 在3下标上添加一个值为10的节点
		System.out.println("添加后");
		linkList.printNode(linkList.head);// 输出链表内容
		System.out.println("链表长度" + linkList.length());// 输出链表长度
		System.out.println("查找链表有没有值为" + 5 + "的节点并返回下标\t" + linkList.valueSeek(5));
		System.out.println("查找链表有没有值为" + 11 + "的节点并返回下标\t" + linkList.valueSeek(11));
		linkList.changeValue(2, 12);// 将下标为2的节点的值更改为12
		System.out.println("更改后");
		linkList.printNode(linkList.head);// 输出链表内容
	}
}

运行结果—_—

链表	2	3	4	5	6	7
链表长度6
删除后
链表	2	3	5	7
链表长度4
添加后
链表	2	3	5	10	7
链表长度5
查找链表有没有值为5的节点并返回下标	2
查找链表有没有值为11的节点并返回下标	-1
更改后
链表	2	3	12	10	7

么得啦~~~~

你可能感兴趣的:(Java代码)